6. Unit Tests#
All new functionality should have unit test coverage. These are found in the tests/unit directory.
Testing is an art to get right! But here are some best practices in terms of unit testing in PyRIT, and some potential concepts to familiarize yourself with as you’re writing these tests.
Make a test that checks one thing and one thing only.
Use
fixturesgenerally, and specifically, if you’re using something across classes, useunit.mocksorintegration.mocks.Memory isolation: Use the
patch_central_databasefixture for test database isolation and reset.Code coverage and functionality should be checked with unit tests. Notebooks and integration tests should not be relied on for coverage.
MagicMockandAsyncMock: these are the preferred way to mock calls.with patchis acceptable to patch external calls.Don’t write to the actual database, use a
MagicMockfor the memory object or usepatch_central_databaseas the database connection.
Not all of our current tests follow these practices (we’re working on it!) But for some good examples, see test_tts_send_prompt_file_save_async, which has many of these best practices incorporated in the test.