6.1 állítja
Az állítások speciális ellenőrzések , amelyeket a kód különböző helyeire lehet beilleszteni. Feladatuk annak megállapítása, hogy valami nem stimmelt. Vagy inkább ellenőrizni, hogy minden úgy megy-e, ahogy kell. Ez „szükség szerint” történik, és különféle módokon beállíthatja.
A fenti kódban már találkozott néhány állítással. Az első az objektumok egyenlőségének ellenőrzése. Ha az objektumok nem egyenlőek, a rendszer kivételt dob, és a teszt sikertelen lesz.
Az összehasonlítás sorrendje itt azért fontos , mert a JUnit a zárójelentésben valami olyasmit fog írni, hogy „1-es érték kapott, de 3-at vártak”. Az ilyen ellenőrzés általános formátuma:
assertEquals(standard , meaning)
Példa:
@Test
public void whenAssertingEquality () {
String expected = "3.1415";
String actual = "3";
assertEquals(expected, actual);
}
6.2 Metódusok assertEquals, assertTrue, assertFalse
Az alábbiakban felsorolom a legnépszerűbb módszereket - állításokat. A nevük alapján teljesen kitalálható, hogyan működnek. De azért írok egy rövid magyarázatot:
asserEquals | Ellenőrzi, hogy két objektum egyenlő-e |
---|---|
assertArrayEquals | Ellenőrzi, hogy két tömb azonos értéket tartalmaz-e |
assertNotNull | Ellenőrzi, hogy az argumentum nem nulla-e |
assertNull | Ellenőrzi, hogy az argumentum nulla-e |
assertNot Same | Ellenőrizze, hogy a két argumentum nem ugyanaz az objektum |
ugyanazt állítja | Ellenőrizze, hogy a két argumentum ugyanaz az objektum |
állítja Igaz | Ellenőrzi, hogy az érv igaz-e |
hamis | Ellenőrzi, hogy az érv hamis-e |
E módszerek némelyike feleslegesnek tűnik. Miért használja az assertSame(a, b)-t , ha csak az assertTrue(a == b) parancsot írhatja le ?
A lényeg az, hogy az assert egy nagyon okos módszer. Sok hasznos dolgot végez, beleértve a hibainformációk naplóba írását . Az első esetben azt írja ki, hogy az A objektumot várták, de a B objektumot megkapta, a második esetben pedig egyszerűen azt írja, hogy igaz volt .
Ha több száz tesztje van, különösen azok, amelyek egy dedikált tesztkiszolgálón futnak, a részletes naplók rendkívül hasznosak lehetnek. Szerintem érted, mire gondolok.
Tömb összehasonlítási példa:
@Test
public void whenAssertingArraysEquality() {
char[] expected = {'J','u','n','i','t'};
char[] actual = "Junit".toCharArray();
assertArrayEquals(expected, actual);
}
6.3 assertAll metódus
Mint fentebb említettük, az assert metódus nemcsak ellenőrzést végez, hanem sok információt is ír a naplóba a hasonló objektumokról.
Tegyünk egy összehasonlítást:
Address address = unitUnderTest.methodUnderTest();
assertEquals("Washington", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());
De ha az egyik paraméter nem egyezik, akkor a többi nem kerül ellenőrzésre. De szeretném, ha mégis előfordulnának, és az eredményeiket rögzítenék a naplóban. Ugyanakkor, ha legalább egy ellenőrzés sikertelen, akkor a teszt továbbra is sikertelen volt.
Erre van egy speciális metódus - assertAll() . Első argumentumként egy megjegyzést kell írni a naplóba, majd tetszőleges számú assert függvényt.
A példánkat a következőképpen írnák át vele:
Address address = unitUnderTest.methodUnderTest();
assertAll("Complex address comparison script",
() -> assertEquals("Washington", address.getCity()),
() -> assertEquals("Oracle Parkway", address.getStreet()),
() -> assertEquals("500", address.getNumber())
);
Ha a cím hibás, akkor valami ilyesmi kerül a naplóba:
Complex scenario comparison address (3 failures)
expected: <Washington> but was: <Seattle>
expected: <Oracle Parkway> but was: <Main Street>
expected: <500> but was: <5772>
6.4 assertTimeout módszer
Emlékszel a @Timeout megjegyzésre ? Lehetővé tette a teljes metódus végrehajtási idejének szabályozását. De néha hasznos korlátozásokat beállítani a kód bizonyos részének végrehajtására a metóduson belül. Ehhez használhatja az assertTimeout() -ot .
Első paraméterként az idő, másodikként pedig a megadott időn belül végrehajtandó kód (függvény) kerül átadásra. Példa:
@Test
public void whenAssertingTimeout() {
assertTimeout(
ofSeconds(2),
() -> {
// pause for one second
Thread.sleep(1000);
}
);
}
Az Assert osztály az assertTimeout() metódus 12 változatát tartalmazza . Ha többet szeretne megtudni róluk, üdvözöljük a hivatalos dokumentációban .
6.5 assertThrows módszer
Nagyon gyakran vannak olyan helyzetek, amikor meg kell győződnie arról, hogy egy adott helyzetben a kód a megfelelő kivételt dobja: hibát észlel, és a megfelelő kivételt dobja. Ez nagyon gyakori helyzet.
Ebben az esetben van egy másik hasznos assert metódus - ez az assertThrows() . Felhívásának általános formátuma:
assertThrows(exception , code)
Alapvetően nagyon hasonlít az assertTimeout() metódushoz , csak azt ellenőrzi, hogy a megadott kód megfelelő kivételt dob-e. Példa:
@Test
void whenAssertingException() {
Throwable exception = assertThrows(
IllegalArgumentException.class,
() -> {
throw new IllegalArgumentException("Exception message");
}
);
assertEquals("Exception message", exception.getMessage());
}