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());
}