Tvrdenia v JUnit 4 a JUnit 5

1. Úvod

V tomto článku sa budeme podrobne zaoberať tvrdeniami dostupnými v rámci JUnit.

Po prechode z článkov JUnit 4 na JUnit 5 a Sprievodca JUnitom 5 teraz ideme do podrobností o rôznych tvrdeniach dostupných v JUnit 4 a JUnit 5.

Zvýrazníme tiež vylepšenia vykonané na tvrdeniach pomocou JUnit 5.

2. Tvrdenia

Tvrdenia sú užitočné metódy na podporu presadzovania podmienok v testoch; tieto metódy sú prístupné cez internet Tvrdiť triedy v JUnit 4 a Tvrdenia jeden, v JUnit 5.

S cieľom zvýšiť čitateľnosť testu a samotných tvrdení sa vždy odporúča dovoz staticky príslušná trieda. Týmto spôsobom môžeme priamo odkazovať na metódu tvrdenia bez toho, aby sme ako predponu predstavovali triedu.

Začnime skúmať tvrdenia dostupné v JUnit 4.

3. Tvrdenia v JUnit 4

V tejto verzii knižnice sú tvrdenia dostupné pre všetky primitívne typy, Predmety, a polia (buď primitívov alebo Predmety).

Poradie parametrov v rámci tvrdenia predstavuje očakávanú hodnotu nasledovanú skutočnou hodnotou; voliteľne prvý parameter môže byť a String správa, ktorá predstavuje výstup správy vyhodnotenej podmienky.

Existuje iba jeden mierne odlišný spôsob definovania tvrdiťTo tvrdenia, ale budeme sa im venovať neskôr.

Začnime s assertEquals jeden.

3.1. assertEquals

The assertEquals tvrdenie overuje, že očakávané a skutočné hodnoty sú rovnaké:

@Test public void whenAssertingEquality_thenEqual () {Očakávaný reťazec = "Baeldung"; Reťazec skutočný = "Baeldung"; assertEquals (očakávaný, skutočný); }

Je tiež možné určiť správu, ktorá sa má zobraziť, keď sa tvrdenie nepodarí:

assertEquals ("zlyhanie - reťazce nie sú rovnaké", očakávané, skutočné);

3.2. assertArrayEquals

Ak chceme tvrdiť, že dve polia sú si rovné, môžeme použiť assertArrayEquals:

@ Test public void whenAssertingArraysEquality_thenEqual () {char [] očakáva sa = {'J', 'u', 'n', 'i', 't'}; char [] actual = "Junit" .toCharArray (); assertArrayEquals (očakávaný, skutočný); }

Ak sú obe polia nulový, bude ich tvrdenie považovať za rovnocenné:

@Test public void givenNullArrays_whenAssertingArraysEquality_thenEqual () {int [] očakávaný = null; int [] skutocne = null; assertArrayEquals (očakávaný, skutočný); }

3.3. assertNotNull a assertNull

Keď chceme vyskúšať, či nejaký predmet je nulový môžeme použiť assertNull tvrdenie:

@Test public void whenAssertingNull_thenTrue () {Object car = null; assertNull ("Auto by malo byť nulové", auto); }

Naopak, ak chceme tvrdiť, že objekt by nemal byť nulový, môžeme použiť znak assertNotNull tvrdenie.

3.4. assertNotSame a tvrdiťSame

S assertNotSame, je možné overiť, či dve premenné neodkazujú na rovnaký objekt:

@Test public void whenAssertingNotSameObject_thenDifferent () {Object cat = new Object (); Objektový pes = nový objekt (); assertNotSame (mačka, pes); }

V opačnom prípade, keď chceme overiť, či sa dve premenné vzťahujú na ten istý objekt, môžeme použiť znak tvrdiťSame tvrdenie.

3.5. tvrdiť Pravda a tvrdiťFaloš

V prípade, že si chceme overiť, či je splnená určitá podmienka pravda alebo nepravdivé, môžeme použiť tvrdiť Pravda tvrdenie alebo tvrdiťFaloš jeden:

@Test public void whenAssertingConditions_thenVerified () {assertTrue ("5 je väčšie ako 4", 5> 4); assertFalse ("5 nie je väčšie ako 6", 5> 6); }

3.6. zlyhať

The zlyhať tvrdenie zlyhá pri skúške hodením AssertionFailedError. Môže sa použiť na overenie, či je vyvolaná skutočná výnimka, alebo keď chceme, aby test zlyhal počas jeho vývoja.

Pozrime sa, ako to môžeme použiť v prvom scenári:

@Test public void whenCheckingExceptionMessage_thenEqual () {try {methodThatShouldThrowException (); zlyhať („Výnimka nebola vyhodená“); } catch (UnsupportedOperationException e) {assertEquals ("Operácia nie je podporovaná", e.getMessage ()); }}

3.7. tvrdiťTo

The tvrdiťTo tvrdenie je jediné v JUnit 4, ktoré má opačné poradie parametrov v porovnaní s ostatnými tvrdeniami.

V tomto prípade má tvrdenie voliteľnú správu o zlyhaní, skutočnú hodnotu a Matcher objekt.

Pozrime sa, ako môžeme pomocou tohto tvrdenia skontrolovať, či pole obsahuje konkrétne hodnoty:

@Test public void testAssertThatHasItems () {assertThat (Arrays.asList ("Java", "Kotlin", "Scala"), hasItems ("Java", "Kotlin")); } 

Ďalšie informácie o účinnom využívaní tvrdiťTo tvrdenie s Matcher objekt, je k dispozícii pri testovaní s Hamcrestom.

4. JUnit 5 tvrdení

JUnit 5 si ponechal mnoho metód tvrdenia z JUnit 4 a pridal niekoľko nových, ktoré využívajú podporu Java 8.

Aj v tejto verzii knižnice sú tvrdenia dostupné pre všetky primitívne typy, Predmety, a polia (buď primitívne, alebo objekty).

Poradie parametrov tvrdení sa zmenilo, parameter výstupnej správy sa presunul ako posledný parameter. Vďaka podpore Java 8 môže byť výstupnou správou a Dodávateľ, čo umožňuje jeho lenivé vyhodnotenie.

Začnime skúmať tvrdenia dostupné aj v JUnit 4.

4.1. assertArrayEquals

The assertArrayEquals tvrdenie overuje, že očakávané a skutočné pole sa rovnajú:

@ Test public void whenAssertingArraysEquality_thenEqual () {char [] očakáva sa = {'J', 'u', 'p', 'i', 't', 'e', ​​'r'}; char [] actual = "Jupiter" .toCharArray (); assertArrayEquals (očakávaný, skutočný, "polia by mali byť rovnaké"); }

Ak si polia nie sú rovnaké, zobrazí sa správa „Polia by mali byť rovnaké”Sa zobrazí ako výstup.

4.2. assertEquals

Pre prípad, že by sme chceli tvrdiť, že dvaja plaváky sú si rovné, môžeme použiť jednoduché assertEquals tvrdenie:

@Test public void whenAssertingEquality_thenEqual () {float square = 2 * 2; plávajúci obdĺžnik = 2 * 2; assertEquals (štvorec, obdĺžnik); }

Ak však chceme tvrdiť, že skutočná hodnota sa líši o preddefinovanú deltu od očakávanej hodnoty, môžeme stále použiť assertEquals ale musíme odovzdať delta hodnotu ako tretí parameter:

@Test public void whenAssertingEqualityWithDelta_thenEqual () {float square = 2 * 2; plávajúci obdĺžnik = 3 * 2; flota delta = 2; assertEquals (štvorec, obdĺžnik, delta); }

4.3. tvrdiť Pravda a tvrdiťFaloš

Vďaka tvrdiť Pravda je možné overiť si dodané podmienky pravda:

@Test public void whenAssertingConditions_thenVerified () {assertTrue (5> 4, „5 is greater the 4“); assertTrue (null == null, "null sa rovná null"); }

Vďaka podpore výrazu lambda je možné dodať a BooleanDodávateľ k tvrdeniu namiesto a boolovský stav.

Pozrime sa, ako môžeme presadiť správnosť a BooleanDodávateľ pomocou tvrdiťFaloš tvrdenie:

@Test public void givenBooleanSupplier_whenAssertingCondition_thenVerified () {podmienka BooleanSupplier = () -> 5> 6; assertFalse (podmienka, „5 nie je väčšie ako 6“); }

4.4. assertNull a assertNotNull

Keď chceme tvrdiť, že objekt nie je nulový môžeme použiť assertNotNull tvrdenie:

@Test public void whenAssertingNotNull_thenTrue () {Object dog = new Object (); assertNotNull (pes, () -> "Pes by nemal mať hodnotu null"); }

Opačným spôsobom môžeme použiť assertNull tvrdenie na kontrolu, či je skutočná nulový:

@Test public void whenAssertingNull_thenTrue () {Object cat = null; assertNull (cat, () -> "Mačka by mala byť nulová"); }

V obidvoch prípadoch sa správa o zlyhaní získa lenivým spôsobom, pretože ide o Dodávateľ.

4.5. tvrdiťSame a assertNotSame

Keď chceme tvrdiť, že očakávané a skutočné sa týkajú toho istého Objekt, musíme použiť tvrdiťSame tvrdenie:

@ Test public void whenAssertingSameObject_thenSuccessfull () {String language = "Java"; Voliteľné voliteľné = Optional.of (jazyk); assertSame (language, optional.get ()); }

Opačným spôsobom môžeme použiť assertNotSame jeden.

4.6. zlyhať

The zlyhať tvrdenie zlyhá v teste s poskytnutou správou o zlyhaní aj so základnou príčinou. To môže byť užitočné na označenie testu, keď nie je dokončený:

@Test public void whenFailingATest_thenFailed () {// Test nebol dokončený zlyhanie ("FAIL - test nebol dokončený"); }

4.7. presadiť všetko

Jedným z nových tvrdení zavedených v JUnit 5 je presadiť všetko.

Toto tvrdenie umožňuje vytváranie zoskupených tvrdení, kde sa vykonávajú všetky tvrdenia a ich zlyhania sa hlásia spolu. Podrobne toto tvrdenie prijíma nadpis, ktorý bude zahrnutý do reťazca správy pre MultipleFailureErrora Prúd z Spustiteľný.

Definujme zoskupené tvrdenie:

@Test public void givenMultipleAssertion_whenAssertingAll_thenOK () {assertAll ("hlavička", () -> assertEquals (4, 2 * 2, "4 je 2 krát 2"), () -> assertEquals ("java", "JAVA" .toLowerCase ()), () -> assertEquals (null, null, "null sa rovná null")); }

Vykonanie zoskupeného tvrdenia sa preruší, iba ak jeden zo spustiteľných súborov vyvolá výnimku na čiernu listinu (OutOfMemoryError napríklad).

4.8. assertIterableEquals

The assertIterableEquals tvrdí, že očakávaný a skutočný zoznam sú si hlboko rovné.

Aby boli rovnaké, obidve iterovateľné tabuľky musia vracať rovnaké prvky v rovnakom poradí a na to, aby boli rovnaké, nie je potrebné, aby boli tieto dve opakovateľné tabuľky rovnakého typu.

S touto úvahou sa pozrime, ako môžeme tvrdiť, že dva zoznamy rôznych typov (LinkedList a ArrayList napríklad) sú si rovné:

@Test public void givenTwoLists_whenAssertingIterables_thenEquals () {Iterable al = new ArrayList (asList ("Java", "Junit", "Test")); Iterable ll = new LinkedList (asList ("Java", "Junit", "Test")); assertIterableEquals (al, ll); }

Rovnakým spôsobom assertArrayEquals, ak sú obidve iterovateľné hodnoty nulové, považujú sa za rovnocenné.

4.9. assertLinesMatch

The assertLinesMatch tvrdí, že očakávaný zoznam String zodpovedá aktuálnemu zoznamu.

Táto metóda sa líši od assertEquals a assertIterableEquals pretože pre každú dvojicu očakávaných a skutočných riadkov vykonáva tento algoritmus:

  1. skontrolujte, či sa očakávaný riadok rovná skutočnému. Ak áno, pokračuje to ďalším párom
  2. považovať očakávaný riadok za regulárny výraz a vykonať kontrolu pomocou String.zápasy() metóda. Ak áno, pokračuje to ďalším párom
  3. skontrolovať, či je očakávaná čiara značka rýchleho posunu vpred. Ak áno, použite zrýchlený posun vpred a zopakujte algoritmus z kroku 1

Pozrime sa, ako môžeme pomocou tohto tvrdenia tvrdiť, že existujú dva zoznamy String mať zodpovedajúce riadky:

@ Test public void whenAssertingEqualityListOfStrings_thenEqual () {Očakávaný zoznam = asList ("Java", "\ d +", "JUnit"); Zoznam skutočných = asList ("Java", "11", "JUnit"); assertLinesMatch (očakávané, skutočné); }

4.10. assertNotEquals

Doplnkové k assertEquals, assertNotEquals tvrdenie tvrdí, že očakávané a skutočné hodnoty nie sú rovnaké:

@Test public void whenAssertingEquality_thenNotEqual () {Integer value = 5; // výsledok algoritmu assertNotEquals (0, hodnota, "Výsledok nemôže byť 0"); }

Ak sú obaja nulový, tvrdenie zlyhá.

4.11. tvrdiťHodí

Aby sa zvýšila jednoduchosť a čitateľnosť, nový tvrdiťHodí assertion nám umožňuje jasný a jednoduchý spôsob tvrdenia, či spustiteľný súbor vyvolá zadaný typ výnimky.

Pozrime sa, ako môžeme uplatniť vyhodenú výnimku:

@Test void whenAssertingException_thenThrown () {Throwable exception = assertThrows (IllegalArgumentException.class, () -> {hodiť novú IllegalArgumentException ("správa o výnimke");}); assertEquals ("Správa o výnimke", exception.getMessage ()); }

Tvrdenie zlyhá, ak nie je vyvolaná žiadna výnimka alebo ak je vyvolaná výnimka iného typu.

4.12. assertTimeout a assertTimeoutPreventívne

V prípade, že chceme tvrdiť, že vykonanie dodaného Spustiteľný končí pred daným Čas vypršal, môžeme použiť assertTimeout tvrdenie:

@Test public void whenAssertingTimeout_thenNotExceeded () {assertTimeout (ofSeconds (2), () -> {// kód, ktorý na vykonanie Thread.sleep (1000);} vyžaduje menej ako 2 minúty); }

Avšak s assertTimeout tvrdenie, dodaný spustiteľný súbor sa vykoná v rovnakom vlákne volajúceho kódu. V dôsledku toho nebude výkon dodávateľa preventívne prerušený, ak dôjde k prekročeniu časového limitu.

V prípade, že si chceme byť istí, že vykonanie spustiteľného súboru bude prerušené, keď presiahne časový limit, môžeme použiť assertTimeoutPreventívne tvrdenie.

Obidve tvrdenia môžu prijať namiesto Spustiteľný, a ThrowingSupplier, predstavujúci akýkoľvek všeobecný blok kódu, ktorý vracia objekt a ktorý môže potenciálne vyhodiť a Hoditeľné.

5. Záver

V tomto tutoriáli sme sa venovali všetkým tvrdeniam dostupným v JUnit 4 aj JUnit 5.

Krátko sme zdôraznili vylepšenia vykonané v JUnit 5 zavedením nových tvrdení a podporou lambdas.

Úplný zdrojový kód tohto článku je ako vždy k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found