JUnit Software-Tests
Übersicht Einleitung JUnit Jia Li Grundlegendes Diana Howey Hendrik Kohrs Praktische Einbindung Benjamin Koch Zili Ye
Einleitung in allgemeines Testen
Automatische Tests Testen ist nicht nur eine Aufgabe unserer Gruppe Automatische Tests sind für uns nicht nur kurzfristig, sondern auch auf lange Sicht ein Gewinn.
Vorteile des häufigen Testens Im Laufe der Programmierung immer weniger Mängel Je früher man testet, desto leichter findet man, wo ein Fehler entstanden ist Geringere Kosten
Häufiges Testen führt letztendlich zu weniger Mängeln
Tests automatisieren Ein einfaches Beispiel : Testen wir die zum Java-Standard gehörende Klasse ArrayList. List fixture = new ArrayList(); // fixture muss jetzt leer sein Object element=new Object(); fixture.add(element); // fixture muss jetzt ein Element haben
Einfaches Testen mit println() List fixture = new ArrayList(); System.out.println(fixture.size()); // das erwartete Ergebnis ist 0 Object element=new Object(); fixture.add(element); System.out.println(fixture.size()); // das erwartete Ergebnis ist 1
Übersichtliche true&false- Anweisungen List fixture = new ArrayList(); System.out.println(fixture.size() == 0); // das erwartete Ergebnis ist true Object element=new Object(); fixture.add(element); System.out.println(fixture.size() == 1); // das erwartete Ergebnis ist true
Verbesserte Version durch eine Assert-Funktion void asserttrue(boolean condition) throws Exception { } if(!condition) throws new Exception ( Prüfung fehlgeschlagen );
Neue Test-Anweisung mit asserttrue() List fixture = new ArrayList(); asserttrue(fixture.size() == 0); Object element=new Object(); fixture.add(element); asserttrue(fixture.size() == 1); Diese Version ist schon ein automatisierter Test
Grundlegendes zu JUnit
Was ist JUnit? Wurde von Erich Gamma und Kent Beck entwickelt Framework zum Testen von Java- Programmen Geeignet für automatisierte Unit-Tests einzelner Klassen Basiert auf ursprünglich für Smalltalk entwickeltem Konzept (SUnit)
Testen mit JUnit Ein JUnit Test kennt nur zwei Ergebnisse: 1. Es gelingt ( grün )
Testen mit JUnit Ein JUnit Test kennt nur zwei Ergebnisse: 1. Es gelingt ( grün ) 2. Es misslingt ( rot )
Warum verwenden wir JUnit? Tests werden automatisch ausgeführt Zeitersparnis (Infrastruktur schon vorhanden) Wiederholbare Tests Fehler werden protokolliert Viele Tests werden gemeinsam ausgeführt und die Ergebnisse zusammengefasst Ort zum Sammeln der geschriebenen Tests Tatsächliche Ergebnisse und Erwartete werden verglichen und Abweichungen gemeldet
Ziele von JUnit Leicht zu schreiben Zielgruppe: Programmierer Schnell ausführbar Leicht auszuführen Isoliert Kombinierbar
Grenzen von JUnit Test müssen selber getestet werden Graphische Oberflächen Mehrschichtige Architekturen können nicht komplett getestet werden Test von größeren Projekten nicht möglich Teilbereiche testbar
Aufbau von JUnit Java-Werkzeug besteht aus mehreren Klassen Alle Klassen von JUnit sind im Paket junit.framework enthalten Prinzip: Zu jeder Klasse eine eigene Testklasse Vorteil: Kein Test-Code in eigentlicher Klasse
Vorgehensweise Testfälle bzw. Testserien überlegen und erstellen Behauptungen aufstellen Test durchführen Ergebnisse auswerten Fehler aufgetreten : Protokollierung, Korrektur / Programmierer benachrichtigen danach erneuter Test
Sonstiges JUnit wurde selber mit JUnit getestet
Praktische Einbindung von JUnit Aufbau & API JUnit und Eclipse sehr kurzes Beispiel
Wichtige Klassen Test schreiben TestCase (einfacher Testfall) TestSuite (Test-Serien) Assert (Behauptungen) Test ausführen TestRunner Test auswerten TestResult (Ergebnis / Protokoll)
Klasse TestCase Klasse wird abgeleitet und erweitert die speziellen, abgeleiteten Testfälle werden ausgeführt
TestCase Einige Methoden setup() Initialisierung, z.b. Datenbankverbindung aufbauen runtest() Durchführung des Tests teardown() Aufräumen, z.b. Datenbankverbindung trennen
TestCase - Fixtures ähnliche Tests können in einem TestCase zusammengefasst werden durch Überschreiben von setup(), teardown() Bsp. von doppelten Code : konto1 = new Konto(3902394, B.Seeger ); konto2 = new Konto(9834399, V. Weber );
Klasse Assert...enthält verschiedene Methoden Behauptungen aufstellen. z.b. : asserttrue( [String message,] boolean bedingung ); 1. Parameter optional: Nachricht bei Exception wirft Exception, falls bedingung nicht true (also false) Test ist dann fehlgeschlagen
Assert Übersicht assertequals() assertfalse() asserttrue() assertnull() assertnotnull() fail() <Test schlägt fehl> assertsame(o1,o2) o1 & o2 zeigen auf gleiches Objekt assertnotsame() assertequal(obj1,obj2) Aufruf der equals()-methode
Weitere Klassen TestSuite Kontainer für Testfälle verschiedene Tests in einer bestimmten Reihenfolge aufrufen Mehrere Klassen eines Projekts testen suite.addtest() : Tests zur Suite hinzufügen TestResult Zählen und Speichern der Fehler
Klasse TestRunner Ausführen und Ausgabe des Testes: grafisch (Swing oder AWT) z.b. junit.swingui.testrunner.run() oder textbasiert (Konsole) junit.textui.testrunner.run() Suchen nach Methoden der Form public void testxxx() Gefundene Methoden ausführen
JUnit & Eclipse JUnit bereits integriert TestCase anlegen:
JUnit & Eclipse (2) Java-Test-Code erstellen Als JUnit Test laufen lassen:
JUnit & Eclipse (3) Test wird protokolliert:
Sehr simples Beispiel sehr einfache Klasse Geldbeutel Eigenschaften: Geldbestand Methoden: Geldbeutel() und: entnehmegeld(betrag) { geldbestand -= betrag; }
Beispiel (2) Erstelle im gleichen Package Testklasse: public class GeldbeutelTest extends TestCase { //... public void testentnehmegeld() { //... nächste Folie }
Beispiel (3) public void testentnehmegeld () { meingeld = new Geldbeutel(100); erwartet = new Geldbeutel(47); meingeld.entnehmegeld(53); // Ergebnis überprüfen: assertequals(meingeld, erwartet); }
Beispiel - Testdurchlauf bei richtiger Implementierung haben die Objekte meingeld und erwartet die gleichen Werte assertequals gibt keinen Fehler aus Test erfolgreich :-) Tests erweitern und weitere Module testen
Quellen http://www.frankwestphal.de/unittestingmitjunit.html http://www.junit.org http://www.javaworld.com/javaworld/jw-12-2000/jw- 1221-junit_p.html http://open.ncsu.edu/se/tutorials/ http://www.informatik.tucottbus.de/~rrichter/teaching/test2004/vortraege/junit/v ortrag_junit.pdf http://de.wikipedia.org Beck, Kent: Junit.O Reilly-Verlag.2005.
ENDE