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.