Im folgenden wird beschrieben, wie man sein Projekt so strukturieren kann, dass auf der einen Seite das Testen erleichtert wird, auf der anderen Seite die Tests vom produktiven Java Quellcode separiert werden. Das erleichtert zum Beispiel die Paketierung zur Auslieferung an Kunden, die lediglich den produktiven Quellcode erhalten sollen.
Bei einigen Entwicklungsumgebungen, wie z.B. Netbeans, ist bereits bei einem leeren Java Projekt eine Separierung von Test Quellcode und Java Quellcode vorgesehen: Es gibt einen Ordner für „Test Packages“ und einen für „Source Packages“. Im Dateisystem werden diese auf die Ordner „src“ und „test“ entsprechend abgebildet. Bei der Tastenausführung werden aus beiden Verzeichnissen die Quellen übersetzt und die Ergebnisse zusammen geführt. Bei dem von Netbeans standardmäßig erstellten Buildfile kann man auch von der Kommandozeile mittels „ant test“ die Tests ausführen, bei „ant jar“ wird eine JAR Datei (im „dist“ Verzeichnis) erstellt, die lediglich den produktiven Code enthält.
Durch das ant Buildfile und die Projektstruktur ist damit ein Netbeans Projekt von Haus aus direkt für eine Continuos Integration Umgebung optimal vorbereitet.
Eclipse ist noch nicht ganz soweit, jedoch sollte man seine Projektstruktur auch hier so aufbauen: Der Code ist klar getrennt, verwendet man eine parallele Paket Struktur, können auch Methoden die „protected“ oder „default“ Sichtbarkeit haben, einfach getestet werden. So vermeidet man zu grob geschnittene Tests (nur „public“ Methoden testen) bzw. unnötige Erweiterung der Sichtbarkeit, in dem man Methoden „public“ macht, nur um sie testen zu können.
Das ganze ist sehr einfach: Startet man ein neues Projekt, so kann man bei der Einrichtung direkt ueber „create new source folder“ neben „src“ einen „test“ Source-Folder anlegen.
Eclipse fügt dann entsprechend alle übersetzten Class Dateien, in diesem Fall „Sample“ aus den produktiven Sourcen und „SampleTest“ aus den Test Quellen im „bin“ Verzeichnis zusammen:
Bei Eclipse muss man sich noch selber um ein Build-System kümmern, wenn man von der IDE unabhängig bauen möchte – und das möchte man. Immer.
Hier bietet sich z.B. „Maven“ an, welches für einfache Projekte auch schnell einzurichten ist. Alternativ kann man auch ant oder das neue Gradle benutzen. Übrigens: Möchte man von Anfang an seine Projektstruktur bereits entlang der Maven Konventionen aufbauen, sollte man seine produktiven Sourcen unter „src/main/java“ und seine Test Klassen unter „src/test/java“ anlegen. Setzt man kein Maven ein, macht das keinen großen Unterschied, da die IDE-Ansicht sich nicht unterscheidet. Moechte man jedoch auf Maven später umstellen, spart man sich etwas Arbeit und hat sich bereits an die Konventionen gewöhnt.