Kør eller ignorer test betinget i JUnit 4

1. Oversigt

Lad os forestille os, at vi har en test for nogle kode, der afhænger af operativsystemet og kun skal køre, hvis vores testmaskine kører på Linux. Hvis den kører på et andet operativsystem, vil vi have, at testen ikke mislykkes, men ignoreres ved kørsel.

En første tilgang kunne være at bruge et par hvis erklæringer for at kontrollere denne tilstand ved hjælp af System klasseegenskaber. Dette fungerer selvfølgelig, men JUnit har en renere og mere elegant metode.

I denne korte vejledning skal vi se på hvordan vi betinget kan køre eller ignorere test i JUnit 4 ved hjælp af Antage klasse.

2. Den Antage Klasse

Denne klasse giver et sæt metoder til understøttelse af betinget testudførelse baseret på visse betingelser. Vores test kører kun, hvis alle disse betingelser er opfyldt. Hvis ikke, JUnit springer bare over dens udførelse og markerer den som bestået i testrapporten. Sidstnævnte er den største forskel med Hævde klasse, hvor en svigtende tilstand fører til, at testen slutter som mislykkes.

En vigtig ting at bemærke er, at den adfærd, vi beskrev for Antage klasse er eksklusiv for standard JUnit-løber. For brugerdefinerede løbere kan tingene være anderledes.

Endelig på samme måde som med Hævde, vi kan kalde Antage metoder enten i @Før eller @BeforeClass annoterede metoder eller inden for @Prøve selve metoden.

Lad os nu gennemgå de mest nyttige metoder til Antage klasse ved at vise nogle eksempler. Lad os antage for alle de følgende eksempler getOsName () vender tilbage Linux.

2.1. Ved brug af antage det

Det antage, at () metode kontrollerer, at staten - i dette tilfælde getOsName () - opfylder betingelserne for matcheren, der er bestået i:

@Test offentlig ugyldig nårAssumeThatAndOSIsLinux_thenRunTest () {antagerThat (getOsName (), er ("Linux")); assertEquals ("run", "KØR" .toLowerCase ()); }

I dette eksempel vi kontrollerede om getOsName () svarer til Linux. Som getOsName () vender tilbage Linux, køres testen. Bemærk, vi bruger Hamcrest matcher-metoden er (T) som matcher her.

2.2. Ved brug af antage sandt

På samme måde kan vi bruge antage sandt () metode til at specificere et boolsk udtryk, der skal evalueres til rigtigt for at testen kan køre. Hvis det evalueres til falsk, vil testen blive ignoreret:

privat boolsk isExpectedOS (String osName) {return "Linux" .equals (osName); } @Test offentlig ugyldig nårAssumeTrueAndOSIsLinux_thenRunTest () {assumeTrue (isExpectedOS (getOsName ())); assertEquals ("run", "RUN" .toLowerCase ()); } 

I dette tilfælde, isExpectedOs () vender tilbage rigtigt. Derfor, detbetingelserne for at testen skal køre er opfyldt, og testen vil blive kørt.

2.3. Ved brug af antage falske

Endelig kan vi bruge det modsatte antage Falsk () metode til at specificere et boolsk udtryk, der skal evalueres til falsk for at testen skal køre. Hvis det evalueres til rigtigt, vil testen blive ignoreret:

@Test offentligt ugyldigt nårAssumeFalseAndOSIsLinux_thenIgnore () {antagerFalse (isExpectedOS (getOsName ())); assertEquals ("run", "RUN" .toLowerCase ()); }

I dette tilfælde, som isExpectedOs () også vender tilbage rigtigt,detbetingelserne for, at testen kan køre, ikke er opfyldt, og testen ignoreres.

2.4. Ved brug af antageNotNull

Når vi vil ignorere en test, hvis noget udtryk er nul, vi kan bruge antageNotNull () metode:

@Test offentligt ugyldigt nårAssumeNotNullAndNotNullOSVersion_thenRun () {antagerNotNull (getOsName ()); assertEquals ("run", "RUN" .toLowerCase ()); }

Som getOsName () returnerer en ikke-nul-værdi, betingelsen for, at testen kan køre, er opfyldt, og testen kører.

2.5. Ved brug af antager ingen undtagelse

Endelig vil vi måske ignorere en test, hvis en undtagelse kastes. Vi kan bruge antage ingen undtagelse () til dette formål:

@Test offentligt ugyldigt nårAssumeNoExceptionAndExceptionThrown_thenIgnore () {assertEquals ("alt ok", "ALT OK" .toLowerCase ()); Streng t = null; prøv {t.charAt (0); } fange (NullPointerException npe) {antageNoException (npe); } assertEquals ("run", "RUN" .toLowerCase ()); }

I dette eksempel, som t er nul,-en NullPointerException undtagelse kastes derfor det betingelserne for, at testen kan køre, ikke er opfyldt, og testen ignoreres.

3. Hvor skal vi placere antageXXX Opkald?

Det er vigtigt at bemærke det opførsel af antageXXX metoder afhænger af, hvor vi lægger dem i vores test.

Lad os ændre vores lidt antage det eksempel så assertEquals () opkaldet går først. Lad os også lave assertEquals () svigte:

@Test offentligt ugyldigt nårAssumeFalseAndOSIsLinux_thenIgnore () {assertEquals ("run", "KØR"); antage Falsk (isExpectedOS (getOsName ())); } 

Når vi kører dette eksempel, har vi:

org.junit.ComparisonFailure: Forventes: kør Faktisk: KØR

I dette tilfælde, vores test ignoreres ikke, fordi den mislykkedes, før vi nåede antage, at () opkald. Det samme sker med alle de antageXXX metoder. Så vi skal sørg for at placere dem på det rigtige sted inden for vores testmetode.

4. Konklusion

I denne korte vejledning har vi set, hvordan vi betinget kan beslutte, om en test skal køre eller ikke ved hjælp af Antage klasse i JUnit 4. Hvis vi bruger JUnit 5, er den også tilgængelig i version 5.4 eller nyere.

Som altid kan kildekoden til de eksempler, vi har været igennem, findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found