JUnit ellenőrizze a várt kivétel • amennyit akar, megmondom

Néha az előfordulása kivétel az elvárt viselkedés a rendszer, és teszteli ellenőrizni kell, hogy valóban bekövetkezik.

A következő öt módja teszt keretén JUnit lefoglaló várható kivétel, hogy ellenőrizze annak tulajdonságait. Az első négy lehet használni JUnit 4, az utóbbi módszer új JUnit 5.







Példaként a tesztet, hogy bizonyítsa a funkciók a standard könyvtár számára ideiglenes fájl létrehozása. Ellenőrizni fogjuk, hogy kivételt típusú IOException történik, miközben megpróbálják létrehozni a fájlt egy nem létező könyvtárba. Ebben az esetben az előre ugyanazon vizsgálat során létrehoz egy ideiglenes könyvtárba, majd hagyni, hogy mi lesz az garantáltan nem létező könyvtárba, amelyek megpróbálják létrehozni a fájlt:

Persze, egy ilyen vizsgálat alá, és a jelentés lesz írva, hogy a kivétel történt. És meg kell ebben az esetben a vizsgálat éppen ellenkezőleg jelölt sikeres. Lássuk, hogyan lehet javítani.

A legegyszerűbb módja annak, hogy jelentést teszt keretet, amely várhatóan kivételével - kell adnunk egy további paramétert várható @Test jelöléseket:

Ez a paraméter tartalmazza a várt típusú kivétel. Ha van egy kivétel, az ilyen típusú - a vizsgálat kerül sor sikeresen. Ha van egy kivétel, más típusú, vagy nincs ott egyáltalán - a vizsgálat fog esni.

  • Nem lehet ellenőrizni szöveges üzenet vagy egyéb ingatlan felmerülő kivételek.
  • Lehetetlen pontosan tudják, hol a kivétel történt. Ebben a példában nem lehet kidobják a teszt funkció, és egy kicsit korábban, hogy hozzon létre egy ideiglenes könyvtárba, amikor megpróbálja. A teszt nem is kap, hogy hívja a teszt funkció - de a jelentés nem jelöli meg sikeresen!

A második ilyen problémák annyira szörnyű, hogy én nem ajánlom senkinek soha nem használja ezt a módszert.







2. try-catch

Mindkét hátrányokat ki lehet küszöbölni, ha a fogás kivételek kifejezetten segítségével tervezés try-catch:

Ha kivétel történik, mielőtt a try blokk - teszt alá, megtudjuk, hogy ő volt probléma.

Ha a teszt funkció nem dobja semmilyen kivételt egyáltalán - eljutunk nem felelt meg () a következő sorban, a vizsgálat alá.

Ha egy kivételt dob ​​a különböző típusú - catch blokk nem is fogja, a vizsgálat még mindig esik újra.

Sikeresen befejeződött, ha a teszt funkció kivételt dob ​​a kívánt típust.

A teszt vált megbízható, soha nem hiányzik a hibákat. A catch blokk, akkor ellenőrizze a tulajdonságait a kifogott kivétel.

Ahhoz azonban, hogy dolgozni try-catch konstrukciót kényelmetlen.

Ahhoz, hogy megszabaduljon, akkor használhatja a szabályt ExpectedException. tartalmazza a normál eloszlás JUnit 4:

A kód most már egy egyszerű sík szerkezetű, bár az összes vonalak száma a kód, sajnos növekedett.

De a fő probléma ennek a módszernek, hogy a teszt ebben a stílusban néz természetellenes - először leírni a viselkedését, majd felhívja a funkciót. Természetesen ez ízlés dolga, de szeretem, amikor ellenőrzi után elhelyezett hívás teszt funkciókat.

4. AssertJ / catch-Eldobható

További szép módon, a funkciók a Java 8-hez további könyvtárakra, mint AssertJ vagy fogással Eldobható. Itt egy példa a dolgozó AssertJ:

És ha nincs kivétel - „csapda” is kivételt dob, és a vizsgálat fog esni.

5. JUnit 5

De miért kell használni minden további könyvtárakra, miért vizsgálati keretek nem biztosítják a kényelmes lehetőséget, hogy a várható kivétel?

Már nyújtani. Lefoglaló kivételeket JUnit 5 nagyon hasonlít az előző példában:

Korábban egy ilyen lehetőség a JUnit hiányzik, mert a korábbi verziók JUnit összpontosított régebbi verziói a Java, ahol nem volt lambda kifejezéseket és kódot írni, mint ez egyszerűen lehetetlen volt. Igen, meg tudod csinálni valami hasonlót segítségével névtelen osztályok, de úgy néz ki, szörnyű, hogy try-catch építési tűnik lovas finomítására.

Tehát, ha meg kell írni a vizsgálatok, amelyekben kivétel történik ellenőrzik - okkal kell keresni az új lehetőségeket JUnit 5.

JUnit ellenőrizze a várt kivétel • amennyit akar, megmondom

Megosztás a Twitter-on Megosztás a Google+