junit test suite filtering test cases
Denne opplæringen vil diskutere hva som er en JUnit Test Suite, hvordan lage en testsuite og hvordan man filtrerer testtilfeller i JUnit 4 vs JUnit 5:
Vi lærte om hvordan du hopper over visse testsaker under gjennomføring i vår forrige opplæring. Vi lærte også om forskjellige merknader som ble brukt i JUnit 4 og JUnit 5 for å gjøre det.
I denne opplæringen vil vi lære:
- Hva er en testpakke?
- Hvordan lager vi en testpakke ved å legge flere testtilfeller inn i en gruppe og utføre suiten ved hjelp av JUnitCore-klassen?
=> Besøk her for den eksklusive opplæringsserien for JUnit Training.
Hva du vil lære:
JUnit Test Suite
JUnit 4: @RunWith, @SuiteClasses Annotations
Opplæringen Flere måter å utføre JUnit-tester på illustrert hvordan du lager en testpakke i JUnit 4.
Kommentarene @RunWith og @SuiteClasses hjalp oss med å lage en testpakke ved å gruppere flere JUnit testklasser. Deretter påkalte en løpefil med klasse JUnitCore.runclasses () utførelsen av testpakken som ble opprettet.
Se den nevnte delen for alle detaljer om arbeidsflyten sammen med den faktiske koden for JUnit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages Annotations
Opprettelsen av en testpakke i JUnit 5 er ganske lik det vi har i JUnit 4. Så, hvor er forskjellen da?
#1) I JUnit 4 , har vi Suite.class som sendes som parameter til @RunWith-kommentar for å støtte opprettelsen av en testpakke mens JUnit 5 bruker den samme @RunWith-kommentaren, men med inndataparameteren som JUnitPlatform.class i stedet for Suite.klasse .
Så ser kodelinjen i JUnit 5 ut @RunWith (JUnitPlatform.class). Dette er merknaden som følger med underprosjektet JUnit Platform.
#to) I JUnit 4 , vi bruker @SuiteClasses å gruppere flere JUnit-klasser atskilt med komma mens du er i JUnit 5 vi har:
- Kommentaren @SelectClasses som tilsvarer @SuiteClasses i JUnit 4 for å gruppere flere JUnit-klasser.
- @SelectPackages kommentar brukes til å gruppere flere tester fra pakken (e). Du må legge inn en strengmatriseverdi som representerer pakken du vil inkludere.
Dermed, med andre ord,
- Hvis du vil gruppere testsaker fra en enkelt pakke, kan JUnit 5 gjøre det.
- Hvis du ønsker å gruppere testsaker fra flere pakker, støtter JUnit 5 deg også. Et notat å huske her er at testene under alle delpakker til den nevnte pakken også blir inkludert i testpakken som standard.
JUnit 5: Ulike scenarier / eksempler
Opprette en testsuite som grupperer flere testklasser
Kodebiten er vist nedenfor:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Opprette en testsuite for enkeltpakke
Kodebiten er vist nedenfor:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Merk :
- Si demo.tester pakken har en underpakke demo.tests.subtests.
- Koden @SelectPackages ({“demo.tests“}) vil inkludere alle testene under underpakken også i testpakken; som standard.
- Hvis du hadde uttalt @SelectPackages ({“demo.tests.subtests“}) , testtilfellene under underpakken demo.tests.subtests vil bare bli inkludert i testpakken, mens testene fra den overordnede pakken, dvs. demo.tester ville ikke være inkludert.
Opprette en testsuite for flere pakker
Kodebiten for å lage en testpakke for flere pakker atskilt med komma i JUnit 5 - vil se ut som vist nedenfor:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Filtering Test Suite - JUnit 4 vs JUnit 5
Noen ganger må vi filtrere ut testtilfeller og utføre et bestemt sett med tester i henhold til våre behov. For eksempel kan det være et sett med tester identifisert for regresjonstesting, et eget sett for enhetstesting og et eget sett med testtilfeller for røykprøving.
Vi må ekskludere eller inkludere testsaker fra bestemte pakker eller klasser eller kategorier. Filtrering eller merking av testene fra en enkelt pakke er det eneste alternativet med JUnit4.
Sammenlignet med JUnit 4 kommer JUnit 5 med et godt sett med funksjoner som støtter dette behovet for å filtrere testtilfellene dine fra enkeltpakken eller flere pakker og delpakker i henhold til dine skiftende krav.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
Testtilfellene i JUnit 4 kan kategoriseres i forskjellige kategorier. Disse kategoriene kan ekskluderes eller inkluderes mens du kjører testpakken. Kommentarene @Category, @IncludeCategory og @ExcludeCategory støttes fra JUnit 4.12 og nyere.
Trinn på høyt nivå for å lage filtrene basert på kategorien eller kategoriene er som følger:
#1) Lag et markørgrensesnitt som spiller en rolle i kategorien.
#to) Kommenter testmetodene til klassene som skal inkluderes i SuiteClasses med @Kategori og kategorienavnet.
# 3) Bruk merknaden i testpakkefilen @IncludeCategory med kategorienavnet for å inkludere testene som tilhører en bestemt kategori.
# 4) Bruk merknaden i testpakkefilen @ExcludeCategory med kategorienavnet for å ekskludere dem.
# 5) @Category-merknaden kan også brukes på testnivå eller klassenivå. Hvis kommentaren brukes på testnivå, blir den spesifikke testen merket med den gitte kategorien, mens hvis merknaden er på klassenivå, blir alle testene i klassen merket til den gitte kategorien.
La oss se på noen flere detaljer for å forstå den praktiske implementeringen av å kategorisere testene og filtrere dem ut for utføring:
Trinn 1:
Vi begynner med opprettelsen av en markørgrensesnitt som vil spille rollen som en kategori for testmetoder. Her oppretter vi en kategori som heter Enhetstest . Koden er veldig enkel. Se koden nedenfor.
Kode for UnitTest.java
package demo.tests; public interface UnitTest {}
Steg 2:
Vi skal merke kategorien på testmetodenivå i klassen JUnitTestCase1.java . For å legge til test case junitMethod1 () i kategorien UnitTest, må vi kommentere testmetoden med @Category (UnitTest.class) .
Dette legger testmetoden til kategorien UnitTest. De andre testmetodene (hvis noen) er ikke merket til kategorien med mindre metodene er merket med en kategori.
For å ha @Category-merknader som fungerer i koden vår, må vi importere pakken org.junit.experimental.categories.Category
Kodebiten fra JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Alternativt kan en testmetode også tilhøre flere kategorier F.eks. : @Category (UnitTest.class, SmokeTest.class)
Trinn 3:
Jeg ville nå, merke kategorien på klassenivå i klassen JUnitTestCase2.java . Den samme utsagnet som ble lagt til på testmetodenivå i det tidligere trinnet, blir også lagt til i den gjeldende klassefilen.
Merk at her vil vi legge til uttalelsen på klassenivå. Hvis du gjør dette, vil alle testmetodene i filen tilhøre Enhetstest Kategori.
Kodebiten fra JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Trinn 4:
er en sikkerhetsnøkkel for nettverket det samme som et passord
Nå som de nødvendige testtilfellene våre er kategorisert i kategorien UnitTest, vil vi nå se hvordan vi kan legge dem til i testpakken ved å filtrere dem ut basert på kategorien. Vi skal gjøre visse kodeendringer i JUnitTestSuite.class for å demonstrere dette.
- Kategorier. Klasse vil bli sendt som en parameter til @RunWith-merknaden.
- @ Suite.SuiteClasses tar testklassens strengmatrise.
- Kommentaren @ Categories.IncludeCategory trenger UnitTest.class som parameter.
- Denne uttalelsen vil hjelpe oss med å filtrere hele suiten og kjøre bare de testtilfellene fra suiten som tilhører kategorien.
- Kategorier. Klasse trenger pakke org.junit.experimental.categories.Categories som skal importeres.
Kodebiten for JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Kommentaren @ Categories.IncludeCategory kan også skrives som @IncludeCategory. Du kan også opprette flere grensesnitt (kategorier) og kommentere klasse / testmetoder med flere kategorier atskilt med komma. Eksemplet nedenfor filtrerer ut testene som tilhører kategori - Kategori1 og Kategori2.
Eksempel: @IncludeCategory ({Category1.class, Category2.class})
Lignende regler følger med @ Categories.ExcludeCategory / @ExcludeCategory for å ekskludere testmetodene under kategorien eller kategoriene under testkjøringen.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5 leveres pakket med flere tilnærminger for organisering og filtrering av testsakene.
JUnit 5 - @IncludeTags, @ExcludeTags
#1) Som JUnit 4 har @IncludeCategory og @ExcludeCategory-merknader for å støtte filtrering av testtilfeller for kjøring.
#to) JUnit 5 har @IncludeTags og @ExcludeTags-merknader for å oppnå samme formål.
# 3) JUnit 4 refererer til testsakene som skal organiseres i en bestemt kategori, mens JUnit 5 refererer til merking av testsakene med en spesifikk tag for å muliggjøre filtrering av testsakene for utføring.
Trinn på høyt nivå for å lage filtrene basert på kodene er som følger:
- Kommenter testmetodene til pakken (e) som skal inkluderes i @SelectPackages med @Stikkord og det brukerdefinerte kodenavnet. En klasse kan ha forskjellige koder for forskjellige testmetoder.
- Du kan også kommentere @Tag på klassenivå slik at alle testene i klassen blir merket.
- Bruk merknaden i testpakkefilen @IncludeTags med taggenavnet for å inkludere testene som tilhører en bestemt tag.
- Bruk merknaden i testpakkefilen @ExcludeTags med taggenavnet for å ekskludere dem fra testpakken.
La oss nå ha en detaljert illustrasjon om hvordan du praktisk implementerer filtrering i JUnit 5.
Trinn 1 : Vi merker en testmetode i JUnit5TestCase1.java til Tag-navnet “Regression”
Kodebiten fra JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Steg 2 : Vi merker en testmetode i JUnit5TestCase2.java til taggenavnet “SmokeTest”.
Kodebiten fra JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Trinn 3: Nå som testmetodene er merket, oppdaterer vi nå JUnit5TestSuite.java for å legge til passende filtre etter koder for testene. Koden nedenfor inkluderer alle tester som er merket som ‘Regresjon’ og ekskluderer alle de som er merket som ‘SmokeTest’.
Kodebiten fra JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Vi vet allerede at når vi sender et pakkenavn i @SelectPackages kommentar, testene i delpakker av pakken blir også lagt til i testpakken.
Det kan være visse delpakker som vi ønsker å inkludere i testpakken vår, mens noen få andre delpakker som vi ikke ønsker eller ikke kan være relevante for å bli inkludert i suiten vår.
Dette blir lettere gjennom kommentarene @IncludePackages og @ExcludePackages i JUnit 5.
La oss anta at vi har en pakke 'demo.tests' som har tre underpakker, dvs. underpakke1, underpakke2 og underpakke 3 med testklassene i hver av pakkene nedenfor.
La oss se et kodebit av JUnit5TestSuite.java for å visualisere hvordan du inkluderer og ekskluderer en pakke.
Scenario nr. 1: Bruk filteret for kun å inkludere testtilfeller fra underpakke1.
Koden nedenfor inkluderer alle testene fra alle JUnit-klassene i pakken demo.tests.subpackage1, men ekskluderer imidlertid alle testene direkte under pakken demo.test og de under pakken subpackage2 og subpackage3.
Kodebiten fra JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Scenario nr. 2: Bruk filteret for å ekskludere testtilfeller bare fra pakken underpakke3.
Koden nedenfor ekskluderer alle testene fra JUnit-klassene i pakken - demo.tests.subpackage3, men suiten inkluderer alle testene direkte under pakken demo.test og de som er under pakken underpakke1 og underpakke2.
Kodebiten fra JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Når du vil inkludere eller ekskludere visse klasser som samsvarer med et bestemt regulært uttrykk fra pakken, kommentarene @ IncludeClassNamePatterns og @ ExcludeClassnamePatterns kan brukes i testfilen klassefil.
La oss nå se illustrasjonen gjennom kodeoppdateringen i JUnit5TestSuite.java
Scenario nr. 1:
Koden nedenfor inkluderer klasser som slutter med ‘Ctests’ fra pakken demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Scenario nr. 2:
Vi skal nå ekskludere de klassene som sette i gang med ‘STest’ fra pakken demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Scenario # 3:
Flere regulære uttrykk kan også sendes som filterkriterier. Koden nedenfor angir to forskjellige regulære uttrykk atskilt med ' ELLER ”Operatør. Spaltestangen | er OR-operatør her.
gratis youtube til mp4 omformer for mac
Koden filtrerer ut klasser igangsetting med Test ( Test.*) eller slutter med Tester (*. Tester?) og inkluderer disse klassene i testpakken da kommentar @IncludeClassNamePatterns brukes.
Merk: Hvis det fullt kvalifiserte klassenavnet samsvarer med minst ett mønster, blir klassen hentet i henhold til @IncludeClassNamePatterns eller @ExcludeClassNamePatterns-merknaden.
@RunWith (JUnitPlatform.class)
@SelectPackages ({“demo.tests“})
@IncludeClassNamePatterns (. * Tester?) $ ”)
Vanlige spørsmål om tilfeller for JUnit-filtrering
Her er et spørsmål som kan ha ligget på tankene dine i ganske lang tid nå.
Q # 1) Hva er forskjellen mellom å deaktivere / ignorere en test og filtrere ut en test? Kan ikke noen av funksjonene bidra til å tjene det samme formålet med å hoppe over testsaker under utførelse?
Svar: Spørsmålet er virkelig et ekte og er verdt å svare på.
- Med filtrering av testfunksjonen kan du ekskludere så vel som inkludere tester avhengig av merket kategori. Mens du deaktiverer, kan du bare bestemme å ekskludere og ikke inkludere utførelsestester.
- Å filtrere ut testtilfellene er en slags betinget hoppende testtilfelle, mens det i tilfelle Ignorerte tester hoppes over uten betingelser.
- En annen signifikant forskjell mellom de to er at når du kjører testsakene med tester merket med @Ignore eller @Deaktivert - vises de ignorerte testene i testresultatene under HOPPET telle
- Når du kjører de filtrerte testene, vises de ikke i testresultatet i det hele tatt.
Konklusjon
I denne veiledningen lærte vi å filtrere ut tester ved å legge til en kategori / tag i testene.
Vi lærte i JUnit 4 at vi har @Category, @IncludeCategory og @ExcludeCategory for å filtrere testtilfellene mens JUnit 5 har @IncludeTags og @ExcludeTags for å gjøre det samme.
Dessuten har JUnit 5 ekstra filtreringsalternativer ved å bruke merknader @IncludePackages, @ExcludePackages, og også merknader for å inkludere eller ekskludere klasser ved hjelp av klassenavnmønstre. Jo mer vi utforsker; vi innser at det er mye mer ennå å utforske.
=> Se opp den enkle JUnit treningsserien her.
Anbefalt lesing
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit-tester: Hvordan skrive JUnit-testtilfeller med eksempler
- Liste over JUnit-merknader: JUnit 4 Vs JUnit 5
- JUnit Tutorial for nybegynnere - Hva er JUnit-testing
- Hva er en JUnit-testarmatur: Veiledning med JUnit 4-eksempler
- Flere måter å utføre JUnit-tester på
- Last ned, installer og konfigurer JUnit i formørkelse
- Introduksjon til JUnit Framework and Its Usage in Selenium Script - Selenium Tutorial # 11