Please it's not a Usenet discussion, so keep the subject general (no "because I am using XYZ I prefer to...") or this will end up in a bloody war! Users following these simple rules should be able to use the most features of JavaUnit without having the mess. (VladimirBossicard)
Proposed organization:
Suggestions from NatPryce
Name test classes in a way that can be easily detected with reflection
For example, if you use CamelCase for class names (as is the Java convention), name your test classes after the tested class, with the prefix "Test_". E.g. the class DatabaseConnector would be tested by the class Test_DatabaseConnector.
A naming convention like this makes it easy to distinguish test classes from functional classes, both visually and mechanically. The latter is useful when you...
Use reflection to create TestSuites
If you do not CodeUnitTestFirst, it's easy to forget to add a test case to a test suite. (You may be retro-fitting tests to some code you have inherited, for example). Furthermore, building a test suite by hand is repetitive, boring, work -- that's the kind of work the computer should be doing, not the programmer! Therefore, use reflection to automatically build the test suite for a test class. The latest version of JavaUnit can do this for individual test classes, but does not help you construct a single TestAll class for your entire system. Therefore...
Build test hierarchies automatically
I have a generic SystemTest class that can find all the unit tests on the classpath and organises them into a tree of test suites organised by package. It does this by recursively searching for class files that start with my naming convention for tests ("Test_") and are not inner classes (the file name does not contain "$"). This ensures that my test suite contains all tests for all packages with no extra work on my part. It also means that I can have...
It's boring to keep a per-package test suite in sync with the tests in the package. Therefore, per-package suites should be generated automatically (see above).
Many of us working in VisualAge tend to have separate packages for test cases, because you can't split a package across projects and we can't be bothered to write something to strip out the test cases for production.
Especially in VisualAge, create package X.test to hold tests for package X.
Test classes in the same package as the code classes ? Is there a reason why it is good to follow this rule, when all we want to test in unit tests are public interfaces.? (Rahul Salota)
Not if everything you test is public and you don't need to instrument your production code for testing.