junit test suite filtering test cases
In diesem Tutorial wird erläutert, was eine JUnit-Testsuite ist, wie eine Testsuite erstellt wird und wie Testfälle in JUnit 4 und JUnit 5 gefiltert werden:
In unserem vorherigen Tutorial haben wir gelernt, wie bestimmte Testfälle während der Ausführung übersprungen werden. Wir haben auch verschiedene Annotationen kennengelernt, die in JUnit 4 und JUnit 5 verwendet wurden, um dies zu tun.
In diesem Tutorial lernen wir:
- Was ist eine Testsuite?
- Wie erstellen wir eine Testsuite, indem wir mehrere Testfälle in einer Gruppe zusammenfassen und die Suite mit der JUnitCore-Klasse ausführen?
=> Besuchen Sie hier für die exklusive JUnit Training Tutorial-Reihe.
Was du lernen wirst:
- JUnit Test Suite
- Filtering Test Suite - JUnit 4 vs JUnit 5
- Fazit
JUnit Test Suite
JUnit 4: @RunWith, @SuiteClasses Annotations
Das Tutorial Mehrere Möglichkeiten zum Ausführen von JUnit-Tests veranschaulicht, wie eine Testsuite in erstellt wird Einheit 4.
Die Anmerkungen @ RunWith und @SuiteClasses half uns beim Erstellen einer Testsuite durch Gruppieren mehrerer JUnit-Testklassen. Anschließend rief eine Runner-Datei mit der Klasse JUnitCore.runclasses () die Ausführung der erstellten Testsuite auf.
In dem genannten Abschnitt finden Sie alle Details zum Workflow sowie den tatsächlichen Code für Einheit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages Annotations
Die Erstellung einer Testsuite in Einheit 5 ist ziemlich ähnlich zu dem, was wir in JUnit 4 haben. Also, wo ist dann der Unterschied?
# 1) Im Einheit 4 Wir haben Suite.class, die als Parameter an die Annotation @RunWith übergeben wird, um die Erstellung einer Testsuite zu unterstützen Einheit 5 verwendet dieselbe @ RunWith-Annotation, jedoch mit dem Eingabeparameter als JUnitPlatform.class statt Suite.class .
Die Codezeile in JUnit 5 sieht also so aus @RunWith (JUnitPlatform.class). Dies ist die Anmerkung, die im Lieferumfang Ihres Teilprojekts JUnit Platform enthalten ist.
#zwei) Im Einheit 4 , wir gebrauchen @SuiteClasses um mehrere JUnit-Klassen zu gruppieren, die in durch ein Komma getrennt sind Einheit 5 wir haben:
- Die Anmerkung @SelectClasses das ist gleichbedeutend mit @SuiteClasses in JUnit 4 zum Gruppieren mehrerer JUnit-Klassen.
- @SelectPackages Annotation wird verwendet, um mehrere Tests aus den Paketen zu gruppieren. Sie müssen einen String-Array-Wert eingeben, der das Paket darstellt, das Sie einschließen möchten.
Mit anderen Worten,
- Wenn Sie Testfälle aus einem einzigen Paket zusammenfassen möchten, können Sie dies mit JUnit 5 tun.
- Wenn Sie Testfälle aus mehreren Paketen gruppieren möchten, unterstützt Sie JUnit 5 auch dabei. Hierbei ist zu beachten, dass die Tests unter allen Unterpaketen des genannten Pakets standardmäßig auch in der Testsuite enthalten sind.
Einheit 5: Verschiedene Szenarien / Beispiele
Erstellen einer Testsuite, in der mehrere Testklassen gruppiert sind
Das Snippet des Codes ist unten dargestellt:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Erstellen einer Testsuite für ein einzelnes Paket
Das Snippet des Codes ist unten dargestellt:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Hinweis ::
- Sagen demo.tests Paket hat ein Unterpaket demo.tests.subtests.
- Der Code @SelectPackages ({“demo.tests“}) wird auch alle Tests unter dem Unterpaket in die Testsuite aufnehmen; standardmäßig.
- Wenn du angegeben hättest @SelectPackages ({“demo.tests.subtests“}) , die Testfälle unter dem Unterpaket demo.tests.subtests wird nur in die Testsuite aufgenommen, während die Tests aus dem übergeordneten Paket, d.h. demo.tests wäre nicht enthalten.
Erstellen einer Testsuite für mehrere Pakete
Das Code-Snippet zum Erstellen einer Testsuite für mehrere Pakete in JUnit 5 durch Komma getrennt - sieht wie folgt aus:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Filtering Test Suite - JUnit 4 vs JUnit 5
Manchmal müssen wir Testfälle herausfiltern und eine bestimmte Reihe von Tests gemäß unseren Anforderungen ausführen. Zum Beispiel könnte es eine Reihe von Tests geben, die für Regressionstests identifiziert wurden, eine separate Reihe für Einheitentests und eine separate Reihe von Testfällen für Rauchtests.
Wir müssen Testfälle von bestimmten Paketen oder Klassen oder Kategorien ausschließen oder einschließen. Das Herausfiltern oder Markieren der Tests aus einem einzelnen Paket ist die einzige Option mit JUnit4.
Im Vergleich zu JUnit 4 bietet JUnit 5 eine Reihe von Funktionen, um diese Notwendigkeit zu unterstützen, Ihre Testfälle aus einem einzelnen Paket oder mehreren Paketen und Unterpaketen gemäß Ihren sich ändernden Anforderungen zu filtern.
Einheit 4 - @Category, @IncludeCategory, @ExcludeCategory
Die Testfälle in JUnit 4 können in verschiedene Kategorien eingeteilt werden. Diese Kategorien können beim Ausführen Ihrer Testsuite ausgeschlossen oder eingeschlossen werden. Die Anmerkungen @Category, @IncludeCategory und @ExcludeCategory werden ab JUnit 4.12 unterstützt.
Die wichtigsten Schritte zum Erstellen der Filter basierend auf der Kategorie oder den Kategorien lauten wie folgt:
# 1) Erstellen Sie eine Markierungsschnittstelle, die in der Kategorie eine Rolle spielt.
#zwei) Kommentieren Sie die Testmethoden der Klassen, die in die SuiteClasses aufgenommen werden sollen @Kategorie und den Kategorienamen.
#3) Verwenden Sie in der Testsuite-Datei die Anmerkung @IncludeCategory mit dem Kategorienamen, um die Tests einzuschließen, die zu einer bestimmten Kategorie gehören.
# 4) Verwenden Sie in der Testsuite-Datei die Anmerkung @ExcludeCategory mit dem Kategorienamen zum Ausschließen.
# 5) Die Annotation @Category kann auch auf Test- oder Klassenebene verwendet werden. Wenn die Anmerkung auf Testebene angewendet wird, wird dieser bestimmte Test mit der angegebenen Kategorie gekennzeichnet. Wenn sich die Anmerkung auf Klassenebene befindet, werden alle Tests innerhalb der Klasse der angegebenen Kategorie zugeordnet.
Schauen wir uns einige weitere Details an, um die praktische Implementierung der Kategorisierung der Tests und des Herausfilterns für die Ausführung zu verstehen:
Schritt 1:
Wir werden mit der Schaffung eines beginnen Marker-Schnittstelle das wird die Rolle eines spielen Kategorie für Testmethoden. Hier erstellen wir eine Kategorie mit dem Namen Gerätetest . Der Code ist sehr einfach. Bitte beachten Sie den folgenden Code.
Code für UnitTest.java
package demo.tests; public interface UnitTest {}
Schritt 2:
Wir werden die Kategorie am markieren Testmethodenebene in der Klasse JUnitTestCase1.java . Um den Testfall junitMethod1 () in die Kategorie UnitTest aufzunehmen, müssen wir die Testmethode mit Anmerkungen versehen @Category (UnitTest.class) .
Dadurch wird die Testmethode zur Kategorie UnitTest hinzugefügt. Die anderen Testmethoden (falls vorhanden) werden nicht der Kategorie zugeordnet, es sei denn, die Methoden sind mit einer Kategorie versehen.
Damit die Annotation @Category in unserem Code funktioniert, müssen wir das Paket importieren org.junit.experimental.categories.Category
Das Code-Snippet aus JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Alternativ kann eine Testmethode auch zu mehreren Kategorien gehören Z.B. :: @Category (UnitTest.class, SmokeTest.class)
Schritt 3:
Ich würde jetzt die Kategorie markieren auf Klassenebene in der Klasse JUnitTestCase2.java . Dieselbe Anweisung, die im vorherigen Schritt auf der Ebene der Testmethode hinzugefügt wurde, wird auch in der aktuellen Klassendatei hinzugefügt.
Beachten Sie, dass wir hier die Anweisung auf Klassenebene hinzufügen. Dadurch gehören alle Testmethoden in der Datei zu Gerätetest Kategorie.
Das Code-Snippet aus JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Schritt 4:
So führen Sie eine SWF-Datei in Chrome aus
Nachdem unsere erforderlichen Testfälle in die UnitTest-Kategorie eingeteilt wurden, werden wir nun sehen, wie Sie sie zur Testsuite hinzufügen können, indem Sie sie basierend auf der Kategorie herausfiltern. Wir werden bestimmte Codeänderungen in der vornehmen JUnitTestSuite.class um dies zu demonstrieren.
- Categories.class wird als Parameter an die Annotation @RunWith übergeben.
- @ Suite.SuiteClasses übernimmt das String-Array der Testklassen.
- Die Anmerkung @ Categories.IncludeCategory benötigt UnitTest.class als Parameter.
- Diese Anweisung hilft uns, die gesamte Suite zu filtern und nur die Testfälle aus der Suite auszuführen, die zur Kategorie gehört.
- Categories.class benötigt ein Paket org.junit.experimental.categories.Categories importiert werden.
Das Code-Snippet für JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Die Anmerkung @ Categories.IncludeCategory kann auch geschrieben werden als @IncludeCategory. Sie können auch mehrere Schnittstellen (Kategorien) erstellen und die Klassen- / Testmethoden mit mehreren durch Komma getrennten Kategorien versehen. Das folgende Beispiel filtert die Tests heraus, die zur Kategorie - Kategorie1 und Kategorie2 gehören.
Beispiel: @IncludeCategory ({Category1.class, Category2.class})
Ähnliche Regeln gelten auch @ Categories.ExcludeCategory /. @ExcludeCategory um die Testmethoden unter der Kategorie oder den Kategorien während des Testlaufs auszuschließen.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5 enthält mehrere Ansätze zum Organisieren und Herausfiltern der Testfälle.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) Wie JUnit 4 verfügt es über Anmerkungen zu @IncludeCategory und @ExcludeCategory, um das Filtern von Testfällen für die Ausführung zu unterstützen.
#zwei) JUnit 5 verfügt über Annotationen @IncludeTags und @ExcludeTags, um denselben Zweck zu erreichen.
#3) JUnit 4 bezieht sich auf die Testfälle, die in einer bestimmten Kategorie organisiert werden sollen, während JUnit 5 sich auf das Kennzeichnen der Testfälle mit einem bestimmten Tag bezieht, um das Filtern der Testfälle zur Ausführung zu ermöglichen.
Die wichtigsten Schritte zum Erstellen der Filter basierend auf den Tags lauten wie folgt:
- Kommentieren Sie die Testmethoden der Pakete, die in den @ SelectPackages enthalten sein sollen @Etikett und den benutzerdefinierten Tag-Namen. Eine Klasse kann unterschiedliche Tags für unterschiedliche Testmethoden haben.
- Sie können @Tag auch auf Klassenebene mit Anmerkungen versehen, damit alle Tests in der Klasse mit Tags versehen werden.
- Verwenden Sie in der Testsuite-Datei die Anmerkung @IncludeTags mit dem Tag-Namen, um die Tests einzuschließen, die zu einem bestimmten Tag gehören.
- Verwenden Sie in der Testsuite-Datei die Anmerkung @ExcludeTags mit dem Tag-Namen zum Ausschließen aus der Testsuite.
Lassen Sie uns nun eine detaillierte Illustration zur praktischen Implementierung der Filterung in JUnit 5 geben.
Schritt 1 : Wir markieren eine Testmethode in JUnit5TestCase1.java mit dem Tag-Namen 'Regression'.
Das Code-Snippet von JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Schritt 2 : Wir markieren eine Testmethode in JUnit5TestCase2.java mit dem Tag-Namen 'SmokeTest'.
Das Code-Snippet von JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Schritt 3: Nachdem die Testmethoden markiert wurden, aktualisieren wir jetzt JUnit5TestSuite.java, um geeignete Filter nach Tags für die Tests hinzuzufügen. Der folgende Code enthält alle Tests, die als 'Regression' gekennzeichnet sind, und schließt alle Tests aus, die als 'SmokeTest' gekennzeichnet sind.
Das Code-Snippet aus JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Wir wissen das bereits, wenn wir einen Paketnamen in der übergeben @SelectPackages Anmerkung: Die Tests in den Unterpaketen des Pakets werden ebenfalls zur Testsuite hinzugefügt.
Es kann bestimmte Unterpakete geben, die wir in unsere Testsuite aufnehmen möchten, während einige andere Unterpakete, die wir nicht möchten oder möglicherweise nicht relevant in unsere Suite aufnehmen möchten.
Dies wird durch die Anmerkungen erleichtert @IncludePackages und @ExcludePackages in JUnit 5.
Nehmen wir an, wir haben ein Paket 'demo.tests', das drei Unterpakete enthält, d. H. Unterpaket1, Unterpaket2 und Unterpaket 3 mit seinen Testklassen in jedem der folgenden Pakete.
Sehen wir uns ein Code-Snippet von JUnit5TestSuite.java an, um zu veranschaulichen, wie ein Paket ein- und ausgeschlossen wird.
Szenario 1: Wenden Sie den Filter nur auf Testfälle aus Unterpaket1 an.
Der folgende Code enthält alle Tests aus allen JUnit-Klassen im Paket demo.tests.subpackage1, schließt jedoch alle Tests direkt unter dem Paket demo.test und die Tests unter dem Paket subpackage2 und subpackage3 aus.
Das Code-Snippet aus JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Szenario 2: Wenden Sie den Filter an, um Testfälle nur aus dem Paketunterpaket3 auszuschließen.
Der folgende Code schließt alle Tests aus den JUnit-Klassen im Paket - demo.tests.subpackage3 aus. Die Suite enthält jedoch alle Tests direkt unter dem Paket demo.test und die Tests unter dem Paket subpackage1 und subpackage2.
Das Code-Snippet aus JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Wenn Sie bestimmte Klassen, die einem bestimmten regulären Ausdruck entsprechen, in das Paket aufnehmen oder ausschließen möchten, werden die Anmerkungen angezeigt @ IncludeClassNamePatterns und @ ExcludeClassnamePatterns kann in der Testsuite-Klassendatei verwendet werden.
Lassen Sie uns nun die Abbildung durch das Code-Update in sehen JUnit5TestSuite.java
Szenario 1:
Der folgende Code enthält Klassen, die mit 'Ctests' aus dem Paket demo.tests enden
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Szenario 2:
Wir werden jetzt jene Klassen ausschließen, die einleiten mit 'STest' aus dem Paket demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Szenario 3:
Es können auch mehrere reguläre Ausdrücke als Filterkriterien übergeben werden. Der folgende Code enthält zwei verschiedene reguläre Ausdrücke, die durch „ ODER ' Operator. Die Schlitzleiste | ist hier der OR-Operator.
Fragen und Antworten zu Salesforce-Administratorinterviews
Der Code filtert Klassen heraus initiieren mit Prüfung (( Prüfung.*) oder Ende mit Tests (*. Tests?) und schließt diese Klassen in die Testsuite ein, wenn die Annotation @IncludeClassNamePatterns verwendet wird.
Hinweis: Wenn der vollständig qualifizierte Klassenname mit mindestens einem Muster übereinstimmt, wird die Klasse gemäß der Annotation @IncludeClassNamePatterns oder @ExcludeClassNamePatterns abgerufen.
@RunWith (JUnitPlatform.class)
@SelectPackages ({“demo.tests“})
@IncludeClassNamePatterns (. * Tests?) $ ”)
FAQ zu JUnit Filtering-Testfällen
Hier ist eine Frage, die Sie vielleicht schon seit einiger Zeit beschäftigt.
F # 1) Was ist der Unterschied zwischen dem Deaktivieren / Ignorieren eines Tests und dem Herausfiltern eines Tests? Kann keine der Funktionen dazu beitragen, Testfälle während der Ausführung zu überspringen?
Antwort: Die Frage ist in der Tat echt und es lohnt sich, sie zu beantworten.
- Mit der Filterfunktion zum Herausfiltern können Sie auch ausschließen einschließen Tests abhängig von der markierten Kategorie. Während Sie beim Deaktivieren möglicherweise nur entscheiden, Tests für die Ausführung auszuschließen und nicht einzuschließen.
- Das Herausfiltern der Testfälle ist eine Art bedingtes Überspringen von Testfällen, während im Fall von ignorierten Tests diese ohne Bedingungen übersprungen werden.
- Ein weiterer wesentlicher Unterschied zwischen beiden besteht darin, dass beim Ausführen der Testfälle mit Tests, die mit @Ignore oder @Disabled kommentiert sind, die ignorierten Tests in den Testergebnissen unter angezeigt werden Übersprungen Anzahl
- Wenn Sie die herausgefilterten Tests ausführen, werden sie überhaupt nicht im Testergebnis angezeigt.
Fazit
In diesem Tutorial haben wir gelernt, wie Sie Tests herausfiltern, indem Sie den Tests eine Kategorie / ein Tag hinzufügen.
In JUnit 4 haben wir gelernt, dass wir @Category, @IncludeCategory und @ExcludeCategory zum Filtern der Testfälle haben, während JUnit 5 @IncludeTags und @ExcludeTags hat, um dasselbe zu tun.
Außerdem verfügt JUnit 5 über zusätzliche Filteroptionen mithilfe von Annotationen @IncludePackages, @ExcludePackages sowie Annotationen zum Einschließen oder Ausschließen von Klassen mithilfe von Klassennamenmustern. Je mehr wir erforschen; Wir erkennen, dass es noch viel mehr zu entdecken gibt.
=> Sehen Sie sich hier die einfache JUnit-Schulungsserie an.
Literatur-Empfehlungen
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit-Tests: So schreiben Sie JUnit-Testfälle mit Beispielen
- Liste der JUnit-Anmerkungen: JUnit 4 Vs JUnit 5
- JUnit Tutorial für Anfänger - Was ist JUnit Testing?
- Was ist ein JUnit-Testgerät? Tutorial mit JUnit 4-Beispielen
- Mehrere Möglichkeiten zum Ausführen von JUnit-Tests
- Laden Sie JUnit In Eclipse herunter, installieren Sie es und konfigurieren Sie es
- Einführung in JUnit Framework und seine Verwendung in Selenium Script - Selenium Tutorial # 11