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.

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