Uvjetno pokrenite ili zanemarite testove u JUnit 4

1. Pregled

Zamislimo da imamo test za neki kôd koji ovisi o operativnom sustavu i trebao bi se izvoditi samo ako naš testni stroj radi na Linuxu. Ako se izvodi na bilo kojem drugom OS-u, želimo da test ne propadne, već da se zanemari tijekom izvođenja.

Prvi pristup mogao bi biti korištenje nekoliko ako izjave za provjeru ovog stanja pomoću Sustav svojstva klase. To naravno djeluje, ali JUnit ima čišću i elegantniju metodu.

U ovom kratkom uputstvu ćemo pogledati kako možemo uvjetno pokrenuti ili zanemariti testove u JUnit 4 koristeći Pretpostavimo razred.

2. The Pretpostavimo Razred

Ova klasa pruža skup metoda za podršku uvjetnom izvođenju testa na temelju određenih uvjeta. Naš test pokrenut će se samo ako su ispunjeni svi ovi uvjeti. Ako ne, JUnit će samo preskočiti njegovo izvršenje i označiti ga kao proslijeđen u izvještaju o ispitivanju. Potonje je glavna razlika s Tvrditi klase, u kojoj neuspješno stanje dovodi do završetka testa kao neuspjeh.

Važno je napomenuti da je ponašanje koje smo opisali za Pretpostavimo klasa je ekskluzivna za zadani pokretač JUnit. S prilagođenim trkačima stvari mogu biti drugačije.

Napokon, na isti način kao i kod Tvrditi, možemo nazvati Pretpostavimo metode bilo u @Prije ili @BeforeClass anotirane metode ili unutar @Test sama metoda.

Prođimo sada kroz najkorisnije metode Pretpostavimo razreda pokazujući neke primjere. Za sve sljedeće primjere, pretpostavimo getOsName () vraća se Linux.

2.1. Koristeći pretpostavi da

The pretpostavi da() metoda provjerava je li država - u ovom slučaju, getOsName () - udovoljava uvjetima podudarnosti:

@Test public void whenAssumeThatAndOSIsLinux_thenRunTest () {pretpostaviti da (getOsName (), je ("Linux")); assertEquals ("trčanje", "RUN" .toLowerCase ()); }

U ovom primjeru, provjerili smo je li getOsName () jednako je Linux. Kao getOsName () vraća se Linux, test će biti pokrenut. Napomena: koristimo Hamcrest metodu podudaranja je (T) kao ovdje podudaranje.

2.2. Koristeći pretpostavitiIstina

Slično tome, možemo koristiti pretpostaviti istinu () metoda za specificiranje logičkog izraza koji mora procijeniti na pravi kako bi test mogao proći. Ako ocjenjuje do lažno, test će se zanemariti:

private boolean isExpectedOS (String osName) {return "Linux" .equals (osName); } @Test javna praznina kadaAssumeTrueAndOSIsLinux_thenRunTest () {pretpostaviti istinu (isExpectedOS (getOsName ())); assertEquals ("trčanje", "RUN" .toLowerCase ()); } 

U ovom slučaju, isExpectedOs () vraća se pravi. Stoga, theispunjeni su uvjeti za provođenje testa i test će biti pokrenut.

2.3. Koristeći pretpostavitiFalse

Napokon, možemo upotrijebiti i suprotno takeFalse () metoda za specificiranje logičkog izraza koji mora procijeniti na lažno kako bi test mogao proći. Ako ocjenjuje do pravi, test će se zanemariti:

@Test javna void whenAssumeFalseAndOSIsLinux_thenIgnore () {pretpostavitiFalse (isExpectedOS (getOsName ())); assertEquals ("trčanje", "RUN" .toLowerCase ()); }

U ovom slučaju, kao isExpectedOs () također vraća se pravi,theuvjeti za provođenje testa nisu ispunjeni i test će se zanemariti.

2.4. Koristeći pretpostavitiNeNull

Kada želimo zanemariti test ako je neki izraz null, možemo koristiti pretpostavitiNijeNula () metoda:

@Test public void whenAssumeNotNullAndNotNullOSVersion_thenRun () {pretpostavitiNotNull (getOsName ()); assertEquals ("trčanje", "RUN" .toLowerCase ()); }

Kao getOsName () vraća vrijednost koja nije null, uvjet za izvođenje testa je zadovoljen i test će se izvesti.

2.5. Koristeći pretpostavitiNoException

Napokon, mogli bismo zanemariti test ako se izuzme izuzetak. Možemo koristiti pretpostavitiNoException () za ovu svrhu:

@Test public void whenAssumeNoExceptionAndExceptionThrown_thenIgnore () {assertEquals ("sve je u redu", "SVE JE OK" .toLowerCase ()); Niz t = null; probajte {t.charAt (0); } catch (NullPointerException npe) {pretpostavitiNoException (npe); } assertEquals ("run", "RUN" .toLowerCase ()); }

U ovom primjeru, kao t je null,a NullPointerException izuzetak se stoga baca the uvjeti za provođenje testa nisu ispunjeni i test će se zanemariti.

3. Gdje bismo trebali staviti pretpostavimoXXX Poziv?

Važno je to napomenuti ponašanje pretpostavimoXXX metode ovisi o tome gdje smo ih stavili u testove.

Idemo malo modificirati naš pretpostavi da primjer pa assertEquals () poziv ide prvi. Također, napravimo assertEquals () iznevjeriti:

@Test public void whenAssumeFalseAndOSIsLinux_thenIgnore () {assertEquals ("run", "RUN"); takeFalse (isExpectedOS (getOsName ())); } 

Kad pokrenemo ovaj primjer, imat ćemo:

org.junit.CompaisonFailure: Očekivano: pokretanje Stvarno: RUN

U ovom slučaju, naš se test ne zanemaruje jer nije uspio prije nego što smo dosegli pretpostavi da() poziv. Isto se događa sa svim pretpostavimoXXX metode. Dakle, trebamo pobrinite se da ih postavimo na pravo mjesto unutar naše metode ispitivanja.

4. Zaključak

U ovom kratkom vodiču vidjeli smo kako možemo uvjetno odlučiti hoćemo li test pokrenuti pomoću programa Pretpostavimo razred u JUnit 4. U slučaju da koristimo JUnit 5, dostupan je i u verziji 5.4 ili novijoj.

Kao i uvijek, izvorni kod primjera kroz koje smo prošli može se naći na GitHubu.


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