Another way of colocating test and code under test, is to add a test method to a functional class. class ClassThatReallyGetsUsed { public: ... public: void test() { ... } }; Colocation is good, up until the point where the amount of test code starts distracting you from the actual code. I nevertheless like using this pattern in a more restricted way: even when I have created a separate test class, my convention is to give it a test() method. This allows separate test classes and ClassesWithTestMethod to be managed using the same TestCollector.