Different implementations of the various UAD interfaces tend to require similar testing. In an effort to avoid duplicating the same or similar test logic across many different classes, it is useful to create base test classes to host the common logic. As much of the testing logic as possible should be located in the base test classes, including definitions of the tests that will be run and assertions of the expected final state. The test classes should be located in a separate utility module in the user-associated-data directory. Interfaces can be defined to specify test cases that should only be run when an implementation meets certain criteria. The BaseTrashHandlerTestCase and supporting interfaces can serve as a model for implementation.