TestNG
TestNG ist ein Framework zum Testen von Java-Programmen, das besonders für automatisierte Unit-Tests einzelner Units (Klassen oder Methoden) geeignet ist. Es baut auf bekannten Konzepten aus JUnit und NUnit auf, ergänzt diese aber durch neue Funktionalitäten.
TestNG | |
---|---|
Basisdaten | |
Entwickler | Cédric Beust, Alexandru Popescu und andere |
Aktuelle Version | 7.3.0 (August 2020) |
Betriebssystem | plattformübergreifend |
Programmiersprache | Java |
Kategorie | Test-Framework |
Lizenz | Apache-Lizenz 2.0 |
deutschsprachig | nein |
testng.org |
Neue Funktionalitäten
TestNG enthält einige Funktionalitäten, die bei den meisten anderen Vertretern von xUnit-Frameworks nicht vorhanden sind:
Mit TestNG lassen sich bestimmte Teile einer Applikation hinsichtlich Nebenläufigkeit testen, indem man deren Tests in parallelen Threads ablaufen lässt. Dafür ist es mit TestNG einerseits möglich, die Tests bestimmter Testsuiten mit beliebig vielen Threads gleichzeitig laufen zu lassen. Unterschiedliche Vorgangsweisen können dafür je Testsuite bestimmt werden: alle Testmethoden in einem eigenen Thread, alle gleich getaggten Testmethoden in einem eigenen Thread, alle Testmethoden der gleichen Testklasse in einem eigenen Thread und alle Testmethoden der gleichen Instanz der Testklasse in einem eigenen Thread. Andererseits ist es je Testmethode möglich zu bestimmen, dass sie mehrmals und von verschiedenen Threads aufgerufen werden soll.
TestNG ermöglicht eine flexible Gruppierung der Tests und Testmethoden mittels XML-Konfiguration oder Annotationen. Damit können beispielsweise Tests für unterschiedliche Teststufen (wie z. B. Modultests, Integrationstests, Akzeptanztests) oder auch Testumgebungen ausgewählt werden. Gruppen können auch mittels Regulären Ausdrücken gewählt, zu anderen Gruppen wieder zusammengefasst oder auch exkludiert werden.
Testmethoden können in TestNG mittels Parameter gesteuert werden. Dies ist sowohl mittels XML-Konfiguration als auch mittels Annotationen möglich. Die Parameter können direkt übergeben oder mittels sogenannter DataProvider zur Laufzeit erzeugt werden. Damit ist es möglich, zum Ausführungszeitpunkt der Tests auf die Laufzeitumgebungen der Tests Rücksicht zu nehmen.
Die DataProvider können für eine Testmethode auch unterschiedliche Daten liefern, diese führen dann zu mehreren Testläufen einer Testmethode mit unterschiedlichen Daten. Somit ist es mit TestNG möglich, datengetriebene Testläufe durchzuführen. Damit kann einfach die Datenabdeckung der Tests erhöht werden.
Die Annotation @Factory
bietet weitere Möglichkeiten, um zur Laufzeit mehrere unterschiedliche Instanzen eines Tests laufen zu lassen.
TestNG generiert Testreports im HTML- und XML-Format. Ab der Version 4.6 besitzt TestNG auch eine Programmierschnittstelle für Reporting.[1] Damit können weitere Report-Generatoren wie beispielsweise ReportNG[2] oder TestNG-XSLT,[3] verwendet werden.
Verwendung
Eine Testklasse kann unter TestNG wie folgt aussehen:
public class Test1 {
@Test(groups = { "functest", "checkintest" })
public void testMethod1() {
}
@Test(groups = {"functest", "checkintest"} )
public void testMethod2() {
}
@Test(groups = { "functest" })
public void testMethod3() {
}
}
Dabei gibt es einige hilfreiche Annotationen[4], wie beispielsweise @BeforeSuite | @AfterSuite | @DataProvider
Eine Testsuite kann über ein XML-Dokument zusammengestellt werden
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Regression1">
<groups>
<run>
<exclude name="brokenTests" />
<include name="checkinTests" />
</run>
</groups>
<classes>
<class name="test.IndividualMethodsTest">
<methods>
<include name="testMethod" />
</methods>
</class>
</classes>
</test>
</suite>
Toolunterstützung
TestNG wird von einer Reihe von Entwicklungswerkzeugen entweder direkt oder mittels Plugins unterstützt. Alle wichtigen Java Entwicklungsumgebungen, Eclipse, IntelliJ IDEA und NetBeans IDE unterstützen TestNG. Weiters wird es auch von allen wichtigen JavaBuild-Management-Tools, Apache Maven, Apache Ant und Gradle unterstützt. Systeme zur kontinuierlichen Integration wie Hudson und Jenkins unterstützen ebenfalls TestNG und können Testergebnisse über die Zeit darstellen. Viele Werkzeuge zur Messung der Testabdeckung wie beispielsweise Cobertura unterstützen ebenfalls TestNG.
Siehe auch
Literatur
- Cedric Beust, Hani Suleiman: Next Generation Java Testing. TestNG and Advanced Concepts. Addison-Wesley, Amsterdam 2007, ISBN 978-0-321-50310-7 (englisch).
- Tomek Kaczanowski: Practical Unit Testing with TestNG and Mockito. Hrsg.: Tomek Kaczanowski. 2012, ISBN 978-83-934893-0-5 (englisch).
Weblinks
- TestNG-Website
- TestNG-Tutorials
- IBM Developerworks In pursuit of code quality: JUnit 4 vs. TestNG – Vergleich zwischen TestNG und JUnit