| _home | ||
|
|
Wie wende ich JUnit effektiv an?Organisation der Testfälle ---» Klasse TestStarter implementieren ---» Testfall neu anlegen ---» Testfall ausführbar machen ---» Testfall zu einer Test-Suite machen ---» Testfall dem Testpaket hinzufügen ---» Testpaket in die globale Test-Suite einbinden ---» Testmethoden implementieren ---» Test einer Bedingung ---» Test der Fehlerbehandlung ---» Testumgebung initialisieren und bereinigen ---» |
|
Organisation der TestfälleDie Testfälle werden rekursiv organisiert. Jedes Paket enthält eine Klasse TestPackage, welche alle Testfälle des Paketes als Test-Suite zusammenfasst. Die Test-Suiten aller Pakete werden wiederum in der Test-Suite TestProject für das gesamte Projekt zusammengefasst. Somit enthält diese Klasse alle Testfälle des Projektes. Mit Hilfe dieser Struktur können nach Bedarf unterschiedliche Teile des Projektes getestet werden:
Klasse TestStarter implementierenDiese Klasse startet die JUnit-GUI und führt automatisch eine Test-Suite aus. Sie wird benötigt, um einzelne Teile des Projektes (z.B. Klassen oder Pakete) unabhängig voneinander testen zu können. import junit.ui.TestRunner;
String[] tests = new String[1];
} _top Testfall neu anlegenDer neue Testfall wird von junit.framework.TestCase abgeleitet und im gleichen Paket wie die zu testende Klasse abgelegt. Als Namenskonvention hat sich Test<NameDerZuTestendenKlasse> bewährt. Innerhalb einer IDE werden dann die Testfälle im gleichen Paket und der gleichen Reihenfolge wie ihre zugehörigen Fachklassen angezeigt. BeispielAnlegen des Testfall TestUser für die Klasse User im Paket demo.User package demo.user; _top Testfall ausführbar machenHierfür muss die main-Methode implementiert werden und die Klasse TestStarter mit dem Testfall aufgerufen werden. BeispielMain-Methode des Testfall TestUser. public static void main ( java. lang.
String [ ] args) { // Test-GUI starten, unter Angabe des voll
qualifizierten Klassennamens Testfall zu einer Test-Suite machenIm Testfall muss die suite-Methode implementiert werden. Hierdurch werden alle Methoden, die mit "test" beginnen, automatisch aufgerufen, wenn der Testfall ausgeführt wird. Der Testfall kann so im Projektfortschritt generisch erweitert werden. Beispielsuite-Methode des Testfall TestUser. public static Test suite() { // hinzufügen aller Testmethoden, beginnend
mit test... } _top Testfall einem Testpaket hinzufügenDie Test-Suite TestPackage fasst alle Testfälle des Paketes zusammen. Sobald im Paket ein neuer Testfall angelegt wird, wird die suite-Methode dieser Klasse um den neuen Testfall erweitert. BeispielKlasse TestPackage im Paket demo.user. Sie umfasst den Testfall TestUser. package demo.user; super(name); } public static Test suite() { TestSuite suite= new TestSuite(); public static void main(String[] args) { TestStarter testStart = new TestStarter( "demo.user.TestPackage" ); } } _top Testpaket in die globale Test-Suite einbindenDie Test-Suite TestProject fasst alle
Testfälle des Projektes zusammen. Sobald ein neues Paket angelegt
wird, wird die suite-Methode dieser Klasse um das neue
Testpaket erweitert. BeispielKlasse TestProject im Paket dem. Sie umfasst das Testpaketdemo.user.TestPackage. package demo; super(name); } public static Test suite() { TestSuite suite= new TestSuite(); public static void main(String[] args) { TestStarter testStart = new TestStarter( "demo.TestProject" ); } } _top Testmethoden implementierenMit Hilfe des Reflection-API werden bei der Ausführung
eines Testfalles alle Methoden, die mit "test" beginnen,
automatisch aufgerufen. Namenskonvention: test<NameDerZuTestendenMethode>, z.B. testGetNrOfUser für den Test der Methode getNrOfUser. _topTest einer BedingungLogische Bedingungen oder Gleichheit von Objekten werden mit Hilfe der assert-Methoden der TestCase-Klasse überprüft (siehe API-Beschreibung der Klassejunit.framework.TestCase). BeispieleTest auf Gleichheit mit boolschen Ausdrücken: private User meierl = new User("Meier", "abc");
assertTrue( meier1.equals( meier2 ) );
Test auf Gleichheit mit numerischen Werten: public void testRemoveAll() { assertEquals( 3, liste.getNrOfUser());
_top Test der FehlerbehandlungJUnit ist hervorragend geeignet, um die Fehlerbehandlung zu testen. Wenn eine Exception erwartet wird, so wird diese in der Testmethode ohne weitere Verarbeitung gefangen. Nach dem Methodenaufruf, welcher die Exception werfen soll, wird mit Hilfe der fail-Methode ein Text ausgegeben. Dieser Text wird in der GUI nur angezeigt, wenn der Test fehlgeschlagen ist (d.h. die Exception wurde nicht geworfen). BeispieleBeim Instanziieren von User-Objekten kann eine IllegalArgumentException auftreten, falls Benutzername und Passwort null sind, oder falls der Benutzername leer ist. public void testUser() { try { User abc = new User( "", "abc" ); fail ("Sollte eine IllegalArgumentException
werfen"); } Beim Lesen von Benutzern kann eine UserNotFoundException auftreten. public void testGetUser() { liste.getUser( "meier" ); _top Testumgebung initialisieren und bereinigenDa in den unterschiedlichen test...-Methoden einer Testklasse meist die gleiche Umgebung (Variablen, Ressourcen etc.) verwendet wird, ist es hilfreich diese Umgebung überall zu verwenden. Mit Hilfe der Methoden setUp und tearDown kann dies erzielt werden. setUp wird vor dem Ausführen einer test...-Methode aufgerufen, und tearDown nach jedem Testmethodenaufruf. BeispielBeim Testen der Klasse UserContainer soll immer die gleiche Benutzer-Liste verwendet werden. Nach dem Durchführen einer test-Methode wird die Liste wieder geleert. // Initialisierung der Testvariablen liste.addUser(meier1); // Zurücksetzen der Testvariablen liste.removeAll(); } _top |