''What basic principles should I follow in creating tests?'' Ignoring the whole CodeUnitTestFirst issue, you should create tests in small chunks. Have each test method test only one piece of functionality (You will often need to use other functionality to set up the test, but that individual test should assume that those worked). Because a test stops executing when an assertion fails, don't put unrelated assertions into the same test method. Make a new test method, and extract out any common setup code either to the setUp() helper method or another method that both tests invoke. Don't bother putting a lot of diagnostic support into your test case to work out exactly why something has broken; the first time the test case breaks and you need to figure out why (as opposed to knowing it because you're working on that feature), you can do it then. YAGNI applies here, just as everywhere else. Your tests should be environment-independent; they shouldn't break when somebody runs them on a box other than yours. Use JavasTempFileFacility. Load test data files as resources. Remember: TestEverythingThatCouldPossiblyBreak. Oh, and CodeUnitTestFirst. ---- There is a fairly good article on the JavaUnit site, which is referenced in TestInfected.