Fortgeschrittene Programmierung in Java Tim Wetegrove 11. Mai 2012 Bereits geschriebener Code lässt sich im nachhinein nur schwer Testen, wenn er nicht testbar entworfen wurde. Änderungen führen oft zu unerwarteten Fehlern. Fehlersuche kann dann sehr aufwendig sein. Tests machen Fortschritte „greifbar“ Tests setzen „Milestones“ und sichern damit die Funktionalität des Codes Qualitätsbewusste Programmiertechnik Entwicklung in kleinen Schritten Hilft das richtige Programm zu entwickeln Test schreiben bevor das Programm geschrieben wird Erster Test muss fehlschlagen Danach Programm ergänzen, sodass der Test erfolgreich verläuft Jede Programmänderung wird durch einen automatisierten Test motiviert! Bevor neuer Code geschrieben wird, wird ein neuer Test geschrieben. Bevor der bestehende Code geändert wird, wird der bestehende Test geändert. Bevor Fehler im Code gesucht und repariert werden, wird der verantwortliche Test repariert. Unit Tests testen Programmteile isoliert von anderen Reichweite von Methoden über Klassen bis hin zu Komponenten JUnit als Framework für diese Tests De-facto-Standard für Entwicklungstests „Assert“ Methoden im Überblick: assertTrue(boolean condition) z.B. : assertTrue(1 == 1); assertFalse(boolean condition) assertEquals(Object expected, Object actual) assertEquals(String expected, String actual) assertEquals(int expected, int actual) …(double expected, double actual, double delta) Delta: Toleranz bei Fliesskommazahlen assertNull(Object object) ◦ Referenz ist null assertNotNull(Object object) ◦ Referenz ist nicht null ◦ z.B.: assertNotNull(store.getMovie(1)); assertSame(Object expected,Object actual) ◦ Sichert die Idientiät zweier Objekte zu assertNotSame(Object expect., Object actual) Assert Methoden funktionieren auch mit float, long, boolean, byte, char und short. 1. Testfallerzeugung: ◦ Framework durchsucht Testklasse nacht test…Methoden und erzeugt ein eigenes Objekt der Klasse. 2. Testlauf: ◦ JUnit führt die gesammelten Testfälle voneinander unabhängig aus. Reihenfolge ist undefiniert Testfälle müssen isoliert von einander ausführbar sein! Von einander abhängige Test sollten zu einem Testfall zusammengefasst werden. CustomerTest setUp testRentMovie… tearDown Testen von Exceptions, fail-Anweisung ◦ Ein Beispiel: JUnit unterscheidet hier zwischen Failure und Error ◦ Failure: Fehlgeschlagene Zusicherung im Test ◦ Error: Unerwartetes Problem wie zum Beispiel eine NullPointerException (hier nicht weiter behandelt) Vielen Dank !