A tesztek feltételes futtatása vagy figyelmen kívül hagyása a 4. JUnit-ben

1. Áttekintés

Képzeljük el, hogy van egy tesztünk az operációs rendszertől függő kódokhoz, és csak akkor futtatható, ha a tesztgépünk Linuxon fut. Ha bármely más operációs rendszeren fut, akkor azt akarjuk, hogy a teszt ne bukjon meg, hanem futás közben kerüljön figyelmen kívül.

Az első megközelítés lehet néhány módszer használata ha utasításokat ennek a feltételnek a használatához Rendszer osztály tulajdonságai. Ez természetesen működik, de a JUnit tisztább, elegánsabb módszerrel rendelkezik.

Ebben a rövid bemutatóban megnézzük hogyan tudjuk feltételesen futtatni vagy figyelmen kívül hagyni a 4-es JUnit tesztjeit a Feltételezni osztály.

2. A Feltételezni Osztály

Ez az osztály egy sor módszert kínál a feltételes tesztfuttatás támogatásához, bizonyos feltételek alapján. Tesztünk csak akkor fut, ha mindezek a feltételek teljesülnek. Ha nem, A JUnit csak átugorja a végrehajtását, és a tesztjelentésben sikeresnek fogja jelölni. Ez utóbbi a fő különbség a Állítsd osztály, amelyben egy meghibásodott állapot miatt a teszt as hiányában.

Fontos megjegyezni, hogy az a viselkedés, amelyet a Feltételezni osztály az alapértelmezett JUnit futó számára kizárólagos. Az egyéni futóknál a dolgok másképp alakulhatnak.

Végül ugyanúgy, mint a Állítsd, hívhatjuk a Feltételezni módszerek akár a @Előtt vagy @Óra előtt jegyzetekkel ellátott módszerek vagy a @Teszt maga a módszer.

Nézzük át most a Feltételezni osztály néhány példával. Tegyük fel, hogy a következő példák mindegyike getOsName () visszatér Linux.

2.1. Használata Feltételezzük, hogy

A Feltételezzük, hogy() módszer ellenőrzi, hogy az állam - ebben az esetben getOsName () - megfelel a beillesztett mérkőzés feltételeinek:

@Test public void whenAssumeThatAndOSIsLinux_thenRunTest () {assumeThat (getOsName (), is ("Linux")); assertEquals ("run", "RUN" .toLowerCase ()); }

Ebben a példában megnéztük, hogy getOsName () megegyezik Linux. Mint getOsName () visszatér Linux, a teszt lefut. Megjegyzés: a Hamcrest matcher módszert alkalmazzuk (T) mint az itteni páros.

2.2. Használata feltételezzük Igaz

Hasonlóképpen használhatjuk a feltételezzük Igaz () metódus egy olyan logikai kifejezés megadására, amelynek értékelnie kell igaz a teszt lefutása érdekében. Ha értékeli, hogy hamis, a tesztet figyelmen kívül hagyják:

privát logikai isExpectedOS (String osName) {return "Linux" .equals (osName); } @Test public void whenAssumeTrueAndOSIsLinux_thenRunTest () {assumeTrue (isExpectedOS (getOsName ())); assertEquals ("run", "RUN" .toLowerCase ()); } 

Ebben az esetben, isExpectedOs () visszatér igaz. Ebből kifolyólag, aa teszt futtatásának feltételei teljesülnek, és a tesztet lefuttatják.

2.3. Használata feltételezzük hamis

Végül az ellenkezőjét is felhasználhatjuk assumeFalse () metódus egy olyan logikai kifejezés megadására, amelynek értékelnie kell hamis a teszt lefutása érdekében. Ha értékeli, hogy igaz, a tesztet figyelmen kívül hagyják:

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

Ebben az esetben as isExpectedOs () is visszatér igaz,aa teszt futtatásának feltételei nem teljesülnek, és a tesztet figyelmen kívül hagyják.

2.4. Használata feltételezzükNotNull

Amikor figyelmen kívül akarunk hagyni egy tesztet, ha valamilyen kifejezés az nulla, használhatjuk a feltételezzükNotNull () módszer:

@Test public void whenAssumeNotNullAndNotNullOSVersion_thenRun () {assumeNotNull (getOsName ()); assertEquals ("run", "RUN" .toLowerCase ()); }

Mint getOsName () nem null értéket ad vissza, a teszt futtatásának feltétele teljesül, és a teszt lefut.

2.5. Használata feltételezzük, hogy NoException

Végül pedig figyelmen kívül hagyhatunk egy tesztet, ha kivételt hozunk. Tudjuk használni assumeNoException () erre a célra:

@Test public void whenAssumeNoExceptionAndExceptionThrown_thenIgnore () {assertEquals ("minden rendben", "MINDEN OK" .toLowerCase ()); Karakterlánc t = null; próbáld ki a {t.charAt (0); } catch (NullPointerException npe) {feltételezNoException (npe); } assertEquals ("run", "RUN" .toLowerCase ()); }

Ebben a példában as t van nulla,a NullPointerException kivételt dobnak tehát a a teszt futtatásának feltételei nem teljesülnek, és a tesztet figyelmen kívül hagyják.

3. Hova tegyük a feltételezzükXXX Hívás?

Fontos megjegyezni a viselkedése feltételezzükXXX a módszerek attól függnek, hogy hova tesszük őket a tesztjeinkbe.

Módosítsuk kissé Feltételezzük, hogy példa így a assertEquals () hívás megy először. Készítsük el a assertEquals () kudarc:

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

Amikor ezt a példát futtatjuk, a következők lesznek:

org.junit.ComparisonFailure: Várható: futtatás Actual: RUN

Ebben az esetben, tesztünket nem hagyjuk figyelmen kívül, mert nem sikerült, mielőtt elértük a Feltételezzük, hogy() hívás. Ugyanez történik az összes feltételezzükXXX mód. Tehát nekünk kell győződjön meg arról, hogy a megfelelő módszerrel helyezzük őket a vizsgálati módszerünkbe.

4. Következtetés

Ebben a rövid bemutatóban láthattuk, hogyan tudjuk feltételesen eldönteni, hogy a tesztnek futtatnia kell-e, a Feltételezni osztály a JUnit 4-ben. Ha a JUnit 5-et használjuk, akkor az 5.4-es vagy újabb verzióban is elérhető.

Mint mindig, a már átélt példák forráskódja megtalálható a GitHubon.