Sehen Sie, welche API-Testlösung im GigaOm Radar Report am besten abgeschnitten hat. Holen Sie sich Ihren kostenlosen Analystenbericht >>

Sehen Sie, welche API-Testlösung im GigaOm Radar Report am besten abgeschnitten hat. Holen Sie sich Ihren kostenlosen Analystenbericht >>
Zum Abschnitt springen
Neben der Unterstützung von Entwicklern bei der Implementierung von Unit-Tests in Java und der Verbesserung der Programmiergeschwindigkeit bietet JUnit-Testing viele Vorteile. In diesem Beitrag werden Sie durch diese Vorteile geführt und erfahren, warum Sie JUnit-Tests für Ihre Entwicklung verwenden sollten.
Zum Abschnitt springen
Zum Abschnitt springen
Eine Version dieses Artikels wurde erstmals auf der Website veröffentlicht Oracle-Blog.
Es ist ein paar Jahre her seit der Veröffentlichung von Einheit 5. Wenn Sie es noch nicht für Ihre Entwicklungstests verwendet haben, sollten Sie dies tun. JUnit 5 bietet eine Vielzahl neuer Funktionen und Verbesserungen, mit denen Sie Zeit und Kopfschmerzen sparen können. Lassen Sie uns einen Blick darauf werfen, wie Sie mit JUnit 5 beginnen, um die Vorteile der neuesten Technologie zu nutzen.
Wenn Sie JUnit 4 schon länger verwenden, scheint das Migrieren von Tests eine entmutigende Aufgabe zu sein. Die gute Nachricht ist, dass Sie wahrscheinlich keine Tests konvertieren müssen - JUnit 5 kann JUnit 4-Tests mit dem ausführen Vintage Bibliothek, so dass Sie einfach mit dem Schreiben neuer Tests mit JUnit 5 beginnen können.
Hier sind vier gute Gründe, JUnit 5 zu verwenden:
Der Wechsel von JUnit 4 zu JUnit 5 ist recht einfach, selbst wenn Sie bereits über JUnit 4-Tests verfügen. Die meisten Organisationen müssen alte JUnits nicht in JUnit 5 konvertieren, es sei denn, neue Funktionen werden benötigt.
JUnit 5-Tests sehen größtenteils genauso aus wie JUnit 4, es gibt jedoch einige Unterschiede, die Sie beachten sollten.
JUnit 5 verwendet das Neue org.JUnit.jupiter Paket für seine Anmerkungen und Klassen. Zum Beispiel, org.JUnit.Test wird org.JUnit.jupiter.api.Test.
Das @Prüfung Annotation hat keine Parameter mehr; Jedes davon wurde in eine Funktion verschoben. Um beispielsweise anzuzeigen, dass ein Test eine Ausnahme in JUnit 4 auslösen soll:
In JUnit 5 wurde dies geändert in:
Ebenso haben sich die Zeitüberschreitungen geändert. In JUnit 4 sahen sie so aus:
In JUnit 5 sehen Zeitüberschreitungen folgendermaßen aus:
Hier sind andere Anmerkungen, die sich geändert haben:
JUnit 5 Assertions sind jetzt in org.JUnit.jupiter.api.Assertions. Die meisten gängigen Behauptungen mögen assertEquals () und assertNotNull () sehen genauso aus wie zuvor, aber es gibt ein paar wesentliche Unterschiede:
Beachten Sie, dass Sie weiterhin Zusicherungen von JUnit 4 in einem JUnit 5-Test verwenden können, wenn Sie dies bevorzugen.
Annahmen wurden verschoben nach org.JUnit.jupiter.api.Annahmen.
Die gleichen Annahmen existieren, aber jetzt unterstützen Boolescher Lieferant sowie Hamcrest Matcher, um die Bedingungen zu erfüllen. Lambdas können (vom Typ Executable) verwendet werden, damit Code ausgeführt wird, wenn die Bedingung erfüllt ist.
Hier ist ein Beispiel in JUnit 4:
In JUnit 5 wird es so:
In JUnit 4 bedeutete das Anpassen des Frameworks im Allgemeinen die Verwendung von a @ RunWith Anmerkung zur Angabe eines benutzerdefinierten Läufers. Die Verwendung mehrerer Läufer war problematisch und erforderte normalerweise eine Verkettung oder die Verwendung von a @Regel. Dies wurde in JUnit 5 mithilfe von Erweiterungen vereinfacht und verbessert.
Zum Beispiel sahen Gebäudetests mit dem Spring-Framework in JUnit 4 folgendermaßen aus:
Mit JUnit 5 fügen Sie stattdessen die Federerweiterung hinzu:
Das @ExtendWith Anmerkungen sind wiederholbar, was bedeutet, dass mehrere Erweiterungen einfach kombiniert werden können.
Dir Sie können auch einfach unsere eigenen benutzerdefinierten Erweiterungen definieren, indem Sie eine Klasse erstellen, aus der eine oder mehrere Schnittstellen implementiert werden org.JUnit.jupiter.api.extensionund füge es dann unserem Test mit hinzu @ExtendWith.
Um einen vorhandenen JUnit 3- oder JUnit 4-Test in JUnit 5 zu konvertieren, sollten die folgenden Schritte für die meisten Tests funktionieren:
Beachten Sie, dass für die Migration parametrisierter Tests etwas mehr Refactoring erforderlich ist, insbesondere wenn Sie JUnit 4 verwendet haben Parametriert (Das Format der parametrisierten JUnit 5-Tests ist viel näher JUnitParams).
Bisher habe ich nur vorhandene Funktionen besprochen und wie sie sich geändert haben. JUnit 5 bietet jedoch viele neue Funktionen, um unsere Tests aussagekräftiger und wartbarer zu machen.
Mit JUnit 5 können Sie die hinzufügen @Anzeigename Anmerkung zu Klassen und Methoden. Der Name wird beim Generieren von Berichten verwendet, um den Zweck von Tests zu beschreiben und Fehler aufzuspüren, zum Beispiel:
Sie können auch einen Anzeigenamengenerator verwenden, um Ihre Testklasse und / oder Methode zu verarbeiten und Testnamen in einem beliebigen Format zu generieren. Einzelheiten und Beispiele finden Sie in der JUnit-Dokumentation.
JUnit 5 führte einige neue Behauptungen ein, wie zum Beispiel:
Testsuiten in JUnit 4 waren nützlich, aber verschachtelte Tests in JUnit 5 sind einfacher einzurichten und zu verwalten und beschreiben die Beziehungen zwischen Testgruppen besser, zum Beispiel:
In der Exreichlich oben können Sie das sehen I Verwenden Sie eine einzelne Klasse für alle Tests im Zusammenhang mit Myclass. I kann überprüfen, ob die Klasse in der äußeren Testklasse instanziierbar ist, und I Verwenden Sie eine verschachtelte innere Klasse für alle Tests, bei denen Myclass wird instanziiert und initialisiert. Das @BeforeEach Die Methode gilt nur für Tests in der verschachtelten Klasse.
Das @DisplayNames Anmerkungen zu den Tests und Klassen geben sowohl den Zweck als auch die Organisation der Tests an. Dies hilft, den Testbericht zu verstehen, weil U can siehe die Bedingungen, unter denen der Test durchgeführt wird (Überprüfen Sie MyClass mit Initialisierung) und was der Test überprüft (meineMethode gibt true zurück). Dies ist ein gutes Testdesignmuster für JUnit 5.
In JUnit 4 gab es eine Testparametrisierung mit integrierten Bibliotheken wie JUnit4Parametriert oder Bibliotheken von Drittanbietern wie JUnitParams. In JUnit 5 sind parametrisierte Tests vollständig integriert und übernehmen einige der besten Funktionen von JUnit4Parametriert und JUnitParams, Zum Beispiel:
Das Format sieht aus wie JUnitParams, wo Parameter direkt an die Testmethode übergeben werden. Beachten Sie, dass die zu testenden Werte aus verschiedenen Quellen stammen können. Hier habe ich nur einen einzigen Parameterr so ist es einfach, a zu verwenden @ValueSource. @EmptySource und @NullSource um das anzuzeigen I Sie möchten der Liste der Werte, mit denen ausgeführt werden soll (und Ihnen), eine leere Zeichenfolge und eine Null hinzufügen kann sie wie oben kombinieren, wenn beide verwendet werden). Es gibt mehrere andere Wertquellen, wie z @EnumSource und @ArgumenteQuelle (ein benutzerdefinierter Werteanbieter). Wenn Sie mehr als einen Parameter benötigen, können Sie auch verwenden @ MethodSource or @CsvSource. Weitere Details und Beispiele finden Sie in der JUnit 5-Dokumentation.
Ein weiterer in JUnit 5 hinzugefügter Testtyp ist @ Wiederholter Test, wobei ein einzelner Test eine bestimmte Anzahl von Malen wiederholt wird.
JUnit 5 bietet die Ausführungsbedingung Erweiterungs-API zum bedingten Aktivieren oder Deaktivieren eines Tests oder Containers (Testklasse). Das ist wie mit @Behindert Bei einem Test können jedoch benutzerdefinierte Bedingungen definiert werden. Es gibt mehrere integrierte Bedingungen, wie z.
Testvorlagen sind keine regulären Tests. Sie definieren eine Reihe von auszuführenden Schritten, die dann an anderer Stelle unter Verwendung eines bestimmten Aufrufkontexts ausgeführt werden können. Das bedeutet, dass Sie eine Testvorlage einmal definieren und dann zur Laufzeit eine Liste mit Aufrufkontexten erstellen können, um diesen Test damit auszuführen. Weitere Details und Beispiele finden Sie in der Junit 5-Dokumentation.
Dynamische Tests sind wie Testvorlagen - die auszuführenden Tests werden zur Laufzeit generiert. Während Testvorlagen mit einem bestimmten Satz von Schritten definiert und mehrmals ausgeführt werden, verwenden dynamische Tests denselben Aufrufkontext, können jedoch unterschiedliche Logik ausführen. Eine Verwendung für dynamische Tests wäre das Streamen einer Liste abstrakter Objekte und das Ausführen eines separaten Satzes von Zusicherungen für jedes Objekt basierend auf ihren konkreten Typen. Gute Beispiele finden Sie in der Junit 5-Dokumentation.
JUnit 5 ist ein leistungsstarkes und flexibles Update des JUnit-Frameworks. Es bietet eine Vielzahl von Verbesserungen und neuen Funktionen zum Organisieren und Beschreiben von Testfällen sowie zum Verständnis der Testergebnisse. Das Aktualisieren auf JUnit 5 ist schnell und einfach. Aktualisieren Sie einfach Ihre Projektabhängigkeiten und verwenden Sie die neuen Funktionen.