Podmienečne spustiť alebo ignorovať testy v JUnit 4

1. Prehľad

Poďme si predstaviť, že máme test na nejaký kód, ktorý závisí od operačného systému a mal by sa spustiť, iba ak je náš testovací stroj spustený v systéme Linux. Ak beží na akomkoľvek inom operačnom systéme, chceme, aby test nezlyhal, ale aby bol za behu ignorovaný.

Prvým prístupom by mohlo byť použitie dvojice ak príkazy na kontrolu tejto podmienky pomocou Systém vlastnosti triedy. To samozrejme funguje, ale JUnit má čistejšiu a elegantnejšiu metódu.

V tomto krátkom návode sa pozrieme na Ako môžeme podmienene spustiť alebo ignorovať testy v JUnit 4 pomocou Predpokladajme trieda.

2. The Predpokladajme Trieda

Táto trieda poskytuje sadu metód na podporu vykonania podmieneného testu na základe určitých podmienok. Náš test bude prebiehať, iba ak budú splnené všetky tieto podmienky. Ak nie, JUnit iba preskočí jeho vykonanie a v protokole o teste ho označí ako splnený. Posledný uvedený je hlavný rozdiel oproti Tvrdiť triedy, v ktorej zlyhanie vedie k ukončeniu testu ako zlyhanie.

Je dôležité si uvedomiť, že správanie, ktoré sme opísali pre Predpokladajme trieda je exkluzívna pre predvoleného bežca JUnit. U bežných bežcov sa veci môžu líšiť.

Nakoniec rovnakým spôsobom ako s Tvrdiť, môžeme nazvať Predpokladajme metódy buď v @ Predtým alebo @BeforeClass anotované metódy alebo v rámci @Test samotná metóda.

Poďme si teraz prejsť najužitočnejšími metódami Predpokladajme triedy uvedením niekoľkých príkladov. Predpokladajme, že pre všetky nasledujúce príklady getOsName () vracia Linux.

2.1. Použitím Predpokladám že

The Predpokladám že() metóda kontroluje, či štát - v tomto prípade getOsName () - spĺňa podmienky odovzdaného dohadzovača:

@Test public void whenAssumeThatAndOSIsLinux_thenRunTest () {převzaťThat (getOsName (), je ("Linux")); assertEquals ("beh", "RUN" .toLowerCase ()); }

V tomto príklade skontrolovali sme či getOsName () rovná sa Linux. Ako getOsName () vracia Linux, test sa spustí. Upozorňujeme, že používame metódu porovnávania Hamcrest je (T) ako tu dohadzovač.

2.2. Použitím predpokladajme

Podobne môžeme použiť predpokládaťTrue () metóda na určenie boolovského výrazu, ktorý sa musí vyhodnotiť pravda aby test prebehol. Ak sa to vyhodnotí na nepravdivé, test bude ignorovaný:

private boolean isExectedOS (String osName) {return "Linux" .equals (osName); } @Test public void whenAssumeTrueAndOSIsLinux_thenRunTest () {převzaťTrue (isExectedOS (getOsName ())); assertEquals ("beh", "RUN" .toLowerCase ()); } 

V tomto prípade, isExectedOs () vracia pravda. Preto thepodmienky na vykonanie testu boli splnené a test sa uskutoční.

2.3. Použitím predpokladajFaloš

Nakoniec môžeme použiť opak převzaťFalse () metóda na určenie boolovského výrazu, ktorý sa musí vyhodnotiť nepravdivé aby test prebehol. Ak sa vyhodnotí na pravda, test bude ignorovaný:

@ Test public void whenAssumeFalseAndOSIsLinux_thenIgnore () {převzaťFalse (isExectedOS (getOsName ())); assertEquals ("beh", "RUN" .toLowerCase ()); }

V tomto prípade ako isExectedOs () tiež vracia pravda,theneboli splnené podmienky pre uskutočnenie testu a test bude ignorovaný.

2.4. Použitím expectNotNull

Keď chceme ignorovať test, ak je nejaký výraz nulový, môžeme použiť expectNotNull () metóda:

@Test public void whenAssumeNotNullAndNotNullOSVersion_thenRun () {převzaťNotNull (getOsName ()); assertEquals ("beh", "RUN" .toLowerCase ()); }

Ako getOsName () vracia nenulovú hodnotu, bola podmienka vykonania testu splnená a test bude prebiehať.

2.5. Použitím expectNoException

Nakoniec by sme mohli chcieť ignorovať test, ak dôjde k výnimke. Môžeme použiť expectNoException () pre tento účel:

@Test public void whenAssumeNoExceptionAndExceptionThrown_thenIgnore () {assertEquals ("všetko v poriadku", "VŠETKO v poriadku" .toLowerCase ()); Reťazec t = null; skúsiť {t.charAt (0); } catch (NullPointerException npe) {takeNoException (npe); } assertEquals ("beh", "RUN" .toLowerCase ()); }

V tomto príklade ako t je nulový,a NullPointerException výnimka sa preto hodí the neboli splnené podmienky pre uskutočnenie testu a test bude ignorovaný.

3. Kam by sme mali dať predpokladaťXXX Volať?

Je dôležité si to uvedomiť správanie predpokladaťXXX metódy závisia od toho, kam ich v testoch vložíme.

Poďme mierne upraviť naše Predpokladám že príklad tak assertEquals () hovor ide ako prvý. Urobme tiež assertEquals () zlyhať:

@Test public void whenAssumeFalseAndOSIsLinux_thenIgnore () {assertEquals ("run", "RUN"); převzaťFalse (isExectedOS (getOsName ())); } 

Keď spustíme tento príklad, budeme mať:

org.junit.ComparisonFailure: Očakávané: spustenie Skutočné: RUN

V tomto prípade, náš test nie je ignorovaný, pretože zlyhal skôr, ako sme sa dostali k Predpokladám že() hovor. To isté sa deje so všetkými predpokladaťXXX metódy. Takže musíme uistite sa, že sme ich vo vnútri našej testovacej metódy umiestnili na správne miesto.

4. Záver

V tomto krátkom tutoriáli sme videli, ako môžeme pomocou nástroja Windows XP podmienečne rozhodnúť, či sa má test spustiť Predpokladajme triedy v JUnit 4. V prípade, že používame JUnit 5, je k dispozícii aj vo verzii 5.4 alebo novšej.

Ako vždy, zdrojový kód príkladov, ktoré sme prešli, nájdete na GitHub.