Úvod do AssertJ

Tento článok je súčasťou série: • Úvod do AssertJ (aktuálny článok) • AssertJ pre Guava

• Funkcie AssertJ’s Java 8

• Vlastné tvrdenia s AssertJ

1. Prehľad

V tomto článku sa budeme venovať AssertJ - komunitnej knižnici riadenej opensource, ktorá sa používa na písanie plynulých a bohatých tvrdení v testoch Java.

Tento článok sa zameriava na nástroje dostupné v základnom module AssertJ s názvom AssertJ-jadro.

2. Maven závislosti

Aby ste mohli používať AssertJ, musíte do svojej stránky zahrnúť nasledujúcu časť pom.xml spis:

 org.assertj assertj-core test 3.4.1 

Táto závislosť pokrýva iba základné tvrdenia Java. Ak chcete použiť pokročilé tvrdenia, budete musieť pridať ďalšie moduly osobitne.

Upozorňujeme, že pre Java 7 a staršie verzie by ste mali používať jadro AssertJ verzie 2.x.x.

Najnovšie verzie nájdete tu.

3. Úvod

AssertJ poskytuje sadu tried a užitočných metód, ktoré nám umožňujú ľahko písať plynulé a nádherné tvrdenia pre:

  • Štandardná Java
  • Java 8
  • Guava
  • Joda Time
  • Neo4J a
  • Swing komponenty

Podrobný zoznam všetkých modulov je k dispozícii na webových stránkach projektu.

Začnime niekoľkými príkladmi priamo z dokumentácie AssertJ:

assertThat (frodo) .isNotEqualTo (sauron) .isIn (fellowshipOfTheRing); assertThat (frodo.getName ()) .startsWith ("Fro") .endsWith ("do") .isEqualToIgnoringCase ("frodo"); assertThat (fellowshipOfTheRing) .hasSize (9). obsahuje (frodo, sam). doesNotContain (sauron);

Vyššie uvedené príklady sú iba špičkou ľadovca, poskytujú však prehľad o tom, ako by mohli vyzerať tvrdenia s touto knižnicou.

4. AssertJ v akcii

V tejto časti sa zameriame na nastavenie AssertJ a preskúmanie jeho možností.

4.1. Začíname

Vďaka nádobe knižnice na ceste triedy je umožnenie tvrdení také ľahké ako pridanie jedného statického importu do testovacej triedy:

importovať statické org.assertj.core.api.Assertions. *;

4.2. Písanie tvrdení

Ak chcete napísať tvrdenie, musíte vždy začať odovzdaním svojho objektu Assertions.assertThat () metódou a potom budete postupovať podľa skutočných tvrdení.

Je dôležité mať na pamäti, že na rozdiel od niektorých iných knižníc nižšie uvedený kód v skutočnosti ešte nič neuplatňuje a bude nikdy nevyhovieť testu:

assertThat (anyRefenceOrValue);

Ak využijete funkcie dokončovania kódu vášho IDE, bude písanie výrazov AssertJ neuveriteľne ľahké vďaka veľmi popisným metódam. Takto to vyzerá v IntelliJ IDEA 16:

Funkcie dokončovania kódu IDE

Ako vidíte, na výber máte z desiatok kontextových metód, ktoré sú k dispozícii iba pre String typu. Pozrime sa podrobne na niektoré z týchto rozhraní API a pozrime sa na niektoré konkrétne tvrdenia.

4.3. Objekt Tvrdenia

Predmety možno porovnať rôznymi spôsobmi buď na určenie rovnosti dvoch objektov, alebo na preskúmanie polí objektu.

Pozrime sa na dva spôsoby, ako môžeme porovnať rovnosť dvoch objektov. Vzhľadom na nasledujúce dva pes predmety fido a fidosClone:

public class Dog {private String name; súkromná plaváková hmotnosť; // štandardní hľadači a nastavovatelia} Pes fido = nový Pes ("Fido", 5.25); Pes fidosClone = nový pes ("Fido", 5,25);

Rovnosť môžeme porovnávať s týmto tvrdením:

assertThat (fido) .isEqualTo (fidosClone);

Toto zlyhá ako rovná sa() porovnáva referencie na objekty. Ak chceme namiesto toho porovnať ich obsah, môžeme použiť isEqualToComparingFieldByFieldRecursively () ako:

assertThat (fido) .isEqualToComparingFieldByFieldRecursively (fidosClone);

Fido a fidosClone sú si rovné, keď robíte rekurzívne pole porovnaním polí, pretože každé pole jedného objektu sa porovnáva s poľom druhého objektu.

Existuje mnoho ďalších metód presadzovania, ktoré poskytujú rôzne spôsoby porovnávania a sťahovania objektov a skúmania a presadzovania v ich poliach. Ak chcete zistiť všetky, obráťte sa na úradníka AbstractObjectAssert dokumentácia.

4.4. Boolovský Tvrdenia

Na testovanie pravdy existuje niekoľko jednoduchých metód:

  • je pravda()
  • isFalse ()

Pozrime sa na ne v akcii:

assertThat ("". isEmpty ()). isTrue ();

4.5. Iterovateľné / pole Tvrdenia

Za Iterable alebo an Pole existuje niekoľko spôsobov, ako tvrdiť, že ich obsah existuje. Jedným z najbežnejších tvrdení by bolo skontrolovať, či Iterable alebo Pole obsahuje daný prvok:

Zoznam list = Arrays.asList ("1", "2", "3"); assertThat (zoznam) .obsahuje ("1");

alebo ak a Zoznam nie je prázdny:

assertThat (zoznam) .isNotEmpty ();

alebo ak a Zoznam začína danou postavou. Napríklad „1“:

assertThat (zoznam) .startWith ("1");

Nezabudnite, že ak chcete pre ten istý objekt vytvoriť viac ako jedno tvrdenie, môžete ich ľahko spojiť.

Tu je príklad tvrdenia, ktoré kontroluje, či poskytnutý zoznam nie je prázdny, obsahuje prvok „1“, neobsahuje žiadne nuly a obsahuje postupnosť prvkov „2“, „3“:

assertThat (zoznam) .isNotEmpty () .contains ("1") .doNotContainNull () .containsSequence ("2", "3");

Pre tieto typy samozrejme existuje oveľa viac možných tvrdení. Ak chcete zistiť všetky, obráťte sa na úradníka AbstractIterableAssert dokumentácia.

4.6. Postava Tvrdenia

Tvrdenia pre typy znakov väčšinou zahŕňajú porovnanie a dokonca aj kontrolu, či daný znak pochádza z a Unicode stôl.

Tu je príklad tvrdenia, ktoré kontroluje, či zadaný znak nie je „a“, či je v tabuľke Unicode, či je väčší ako „b“ a či je malé:

assertThat (someCharacter) .isNotEqualTo ('a') .inUnicode () .isGreaterThanOrEqualTo ('b') .isLowerCase ();

Podrobný zoznam všetkých tvrdení typov znakov nájdete v časti AbstractCharacterAssert dokumentácia.

4.7. Trieda Tvrdenia

Tvrdenia pre Trieda typu sú väčšinou o kontrole jeho polí, Trieda typy, prítomnosť anotácií a konečnosť triedy.

Ak chcete presadiť túto triedu Spustiteľné je rozhranie, musíte jednoducho napísať:

assertThat (Runnable.class) .isInterface ();

alebo ak chcete skontrolovať, či je možné jednu triedu priradiť druhej:

assertThat (Exception.class) .isAssignableFrom (NoSuchElementException.class);

Všetko možné Trieda tvrdenia si môžete pozrieť v AbstractClassAssert dokumentácia.

4.8. Súbor Tvrdenia

Súbor tvrdenia sa týkajú kontroly, či sú dané Súbor inštancia existuje, je adresárom alebo súborom, má určitý obsah, je čitateľná alebo má príponu.

Tu môžete vidieť príklad tvrdenia, ktoré kontroluje, či daný súbor existuje, je súbor a nie adresár, či je čitateľný a zapisovateľný:

 assertThat (someFile). existuje () .isFile () .canRead () .canWrite ();

Všetky možné tvrdenia triedy sú k dispozícii v dokumente AbstractFileAssert dokumentácia.

4.9. Double / Float / Integer Tvrdenia

Double / Float / Integer a ďalšie Číslo Typy

Číselné tvrdenia sa týkajú porovnania číselných hodnôt v rámci alebo bez daného posunu. Napríklad ak chcete skontrolovať, či sú si dve hodnoty podľa danej presnosti rovnaké, môžeme urobiť nasledovné:

assertThat (5.1) .isEqualTo (5, withPrecision (1d));

Všimnite si, že používame už importované withPrecision (Double offset) pomocná metóda na generovanie Ofset predmety.

Ďalšie tvrdenia nájdete v dokumentácii AbstractDoubleAssert.

4.10. InputStream Tvrdenia

Je tu iba jeden InputStream-špecifické tvrdenie k dispozícii:

  • hasSameContentAs (očakáva sa InputStream)

a v akcii:

assertThat (dané) .hasSameContentAs (očakávané);

4.11. Mapa Tvrdenia

Mapa tvrdenia umožňujú skontrolovať, či mapa obsahuje určitý záznam, množinu záznamov alebo kľúče / hodnoty osobitne.

A tu vidíte príklad tvrdení, ktoré kontrolujú, či daná mapa nie je prázdna, obsahuje numerický kláves „2“, neobsahuje numerický kláves „10“ a obsahuje záznam: kľúč: 2, hodnota: „a“:

assertThat (mapa) .isNotEmpty () .containsKey (2) .doNotContainKeys (10) .contains (záznam (2, „a“));

Ďalšie tvrdenia nájdete na AbstractMapAssert dokumentácia.

4.12. Hoditeľné Tvrdenia

Hoditeľné tvrdenia umožňujú napríklad: inšpekciu správ výnimky, trasovanie zásobníka, kontrolu alebo overenie, či už bola výnimka vyvolaná.

Pozrime sa na príklad tvrdenia, ktoré kontroluje, či bola daná výnimka vyhodená, a má správu končiacu sa na „c“:

assertThat (ex) .hasNoCause (). hasMessageEndingWith ("c");

Ďalšie tvrdenia nájdete v dokumentácii AbstractThrowableAssert.

5. Popisné tvrdenia

Ak chcete dosiahnuť ešte vyššiu úroveň výrečnosti, môžete pre svoje tvrdenia vytvoriť dynamicky generované vlastné popisy. Kľúčom k dosiahnutiu tohto cieľa je as (Opis reťazca, Objekt ... args) metóda.

Ak definujete svoje tvrdenie takto:

assertThat (person.getAge ()) .as ("Vek% s by sa mal rovnať 100", person.getName ()) .isEqualTo (100);

toto získate pri spustení testov:

[Alexov vek by sa mal rovnať 100], ale predpokladal:

6. Java 8

AssertJ plne využíva funkčné programovacie funkcie Java 8. Poďme sa ponoriť do príkladu a uvidíme ho v praxi. Najprv sa pozrime, ako to urobíme v prostredí Java 7:

assertThat (fellowshipOfTheRing) .filteredOn ("závod", HOBBIT). obsahujeOnly (sam, frodo, pippin, veselé);

Tu filtrujeme zbierku o rase Hobit a v prostredí Java 8 môžeme urobiť niečo také:

assertThat (fellowshipOfTheRing) .filteredOn (znak -> znak.getRace (). rovná sa (HOBBIT)). obsahujeOnly (sam, frodo, pippin, veselé);

V ďalšom článku z tejto série sa budeme venovať možnostiam AssertJ Java8. Vyššie uvedené príklady boli prevzaté z webovej stránky AssertJ.

7. Záver

V tomto článku sme stručne preskúmali možnosti, ktoré nám dáva AssertJ, spolu s najpopulárnejšími tvrdeniami pre základné typy Java.

Implementáciu všetkých príkladov a útržkov kódu nájdete v projekte GitHub.

Ďalšie » AssertJ pre Guavu

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