Softwaretests mit JUnit und Eclipse Dipl.-Inform. Adam Giemza 1 Softwaretests... ... sind sehr wichtig, aber „Ich habe keine Zeit zum Testen“ „Testen von Software ist langweilig“ „Ich mache keine Fehler, mein Code funktioniert“ „Testen kann ich später immer noch“ 2 Warum testen wir Software? Tests sollen Fehler finden Fehlerfreie Software Hohe Softwarequalität 3 Ziel: Hohe Softwarequalität ● ● Statische Methoden ● Code-Analyse durch formale Prüfungen ● Code Review Dynamische Methoden ● Debugging ● Testen 4 Was ist ein Test? ● Prüft Korrektheit eines Softwarebausteins ● Jederzeit und beliebig oft wiederholbar ● Ergebnis bei gleichen Parametern gleich ● Reduziert das Restrisiko verbleibender Fehler ● Deckt Fehler auf, beweist nicht Fehlerfreiheit 5 Verschiedene Arten von Tests UnitTests Systemtests Akzeptanztest Performance-Tests Integrationstests 6 Wer schreibt einen UnitTest? ● ● ● Tests werden von den Entwicklern geschrieben Entwickler einer Komponente muss auch entsprechenden Test schreiben, um die Komponente zu testen Fehlerfreie Tests erhöhen Vertrauen in Code! 7 JUnit ● ● ● ● ● Framework zum automatisierten Testen von Units in Java Units sind Einheiten; in Java Klassen, Objekte und Methoden JUnit entwickelt von Kent Beck und Erich Gamma Testen ist eine zentrale Tätigkeit im XPEntwicklungszyklus XP (Extreme Programming) 8 JUnit (2) ● Framework selbst in Java geschrieben ● Zwei Versionen ● ● ● 3.8.1 – Java 1.4.x und kleiner ● 4.x – Java 1.5.x und höher Tests werden in Java geschrieben (Programm und Tests in einer Sprache) Nur zwei Ergebnisse eines Tests: ● Gelingt (grün) ● Gelingt nicht (rot) (Failure oder Error) 9 JUnit ≤3.8.x ● Package junit.framework.* ● Testklasse von TestCase ableiten ● Methoden müssen mit test beginnen ● setUp() und tearDown() überschreiben ● TestCase leitet ab von Assert ● Assert bietet statische Methoden zur Überprüfung static public void assertEquals( Object expected, Object actual) ● TestSuite als Sammlung von TestCases 10 JUnit ≥4.x ● Package org.junit.* ● Nutzt Annotations von Java 1.5 ● POJOs als Testklassen ● Testmethoden durch @Test-Annotation ● Weitere Annotationen ● ● @Before, @After (siehe setUp und tearDown) @BeforeClass, @AfterClass (einmaliger Aufruf vor und nach dem Test) 11 JUnit ≥4.x (2) ● Assert durch statischen Import import static org.junit.Assert.*; ● TestSuite durch @RunWith -Annotation import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({Test1.class, Test2.class}) public class AllTests {} 12 JUnit ≥4.x (3) ● ● Parametrisierte Tests (siehe Demo) Möglichkeit JUnit 3.x Test in JUnit 4 einzubetten (JUnit4TestAdapter) ● @Ignore -Annotation mit Text ● Parameter der @Test -Annotation ● expected=IllegalArgumentException.class ● timeout=2000 13 JUnit Demo mit Eclipse 14 Abdeckung der Testfälle ● ● ● Tests decken nur Fehler auf, beweisen nicht Fehlerfreiheit Hohe Abdeckung der Tests ● Parametervarianten ● Code-Abdeckung Je mehr Code durch Tests abgedeckt ist, desto geringer ist das Restrisiko für Fehler 15 EclEmma ● Java Code Coverage Tool für Eclipse ● Basiert auf Emma (Java Code Coverage Tool) ● ● ● Analysiert den Code-Durchlauf und bietet Statistiken ● Abdeckungsübersicht ● Färbung des Source Codes www.eclemma.org Eclipse Update Site: http://update.eclemma.org/ 16 EclEmma Demo 17 Viel Spaß beim Testen! 18