Hamcrest prilagođeni mečevi

1. Uvod

Kao i ugrađena podudaranja, Hamcrest također pruža podršku za stvaranje prilagođenih podudaranja.

U ovom uputstvu pobliže ćemo pogledati kako ih stvoriti i koristiti. Da biste na brzinu pogledali dostupna podudaranja, pogledajte ovaj članak.

2. Postavljanje prilagođenih podudaranja

Da bismo dobili Hamcrest, moramo dodajte sljedeću Mavenovu ovisnost u našu pom.xml:

 org.hamcrest java-hamcrest 2.0.0.0 test 

Najnoviju verziju Hamcrest možete pronaći na Maven Central.

3. Predstavljamo TypeSafeMatcher

Prije početka s našim primjerima, važno je razumjeti razred TypeSafeMatcher.Morat ćemo proširiti ovu klasu kako bismo stvorili vlastiti podudarnik.

TypeSafeMatcher je apstraktna klasa, pa sve potklase moraju implementirati sljedeće metode:

  • odgovara sigurno (T t): sadrži našu logiku podudaranja
  • descriTo (Opis opisa): prilagođava poruku koju će klijent dobiti kad naša logika podudaranja nije ispunjena

Kao što možemo vidjeti u prvoj metodi, TypeSafeMatcher je parametriziran, pa ćemo morati deklarirati tip kad ga koristimo. To će biti vrsta objekta koji testiramo.

Razjasnimo to gledajući naš prvi primjer u sljedećem odjeljku.

4. Stvaranje samoDigits Podudaranje

Za naš prvi slučaj upotrebe, stvorit ćemo podudarnost koja vraća true ako je određeno Niz sadrži samo znamenke.

Tako, samoDigits primijenjen na “123” trebao bi se vratiti pravi dok “zdravo1"I"zbogom”Treba vratiti false.

Započnimo!

4.1. Stvaranje utakmica

Za početak s našim podudaranjem stvorit ćemo klasu koja se proširuje TypeSafeMatcher:

javna klasa IsOnlyDigits proširuje TypeSafeMatcher {@Override zaštićene logičke podudarnostiSafely (Nizovi) {// ...} @Override public void descriTo (Opis opisa) {// ...}}

Imajte na umu da s obzirom na to da je objekt koji ćemo testirati tekst, parametriramo našu podrazred od TypeSafeMatcher s razredom Niz.

Sada smo spremni dodati našu implementaciju:

javna klasa IsOnlyDigits proširuje TypeSafeMatcher {@Override zaštićene logičke podudarnostiSafely (Nizovi) {try {Integer.parseInt (s); povratak istinit; } catch (NumberFormatException nfe) {return false; }} @Override public void descriTo (Opis opisa) {description.appendText ("samo znamenke"); }}

Kao što vidimo, šibiceSafey pokušava raščlaniti naš unos Niz u an Cijeli broj. Ako uspije, vraća se pravi. Ako ne uspije, vraća se lažno. Uspješno reagira na naš slučaj upotrebe.

Na drugoj strani, opišiTo prilaže tekst koji predstavlja naša očekivanja. Vidjet ćemo kako će se ovo dalje prikazivati ​​kada upotrijebimo svoj podudarnik.

Za dovršetak našeg podudaranja trebamo još samo jednu stvar: statička metoda za pristup, pa se ponaša kao i ostali ugrađeni mečevi.

Pa ćemo dodati nešto poput ovoga:

javni statički Matcher onlyDigits () {vratiti nove IsOnlyDigits (); }

I gotovi smo! Pogledajmo kako koristiti ovu podudarnost u sljedećem odjeljku.

4.2. Upotreba podudaranja

Do koristite naše potpuno novo podudaranje, stvorit ćemo test:

@Test javna praznina givenAString_whenIsOnlyDigits_thenCorrect () {String digits = "1234"; assertThat (znamenke, samoDigitice ()); }

I to je to. Ovaj test će proći jer je ulaz Niz sadrži samo znamenke. Zapamtite to, da bude malo čitljivije, možemo koristiti podudaranje je koji djeluje kao omot nad bilo kojim drugim podudaranjem:

assertThat (znamenke, je (onlyDigits ()));

Konačno, ako bismo izvršili isti test, ali s ulazom "123ABC", izlazna poruka bila bi:

java.lang.AssertionError: Očekivano: samo znamenke, ali: bilo je "123ABC"

Ovdje vidimo tekst koji smo dodali opišiTo metoda. Kao što smo možda primijetili, važno je stvoriti pravilan opis onoga što se očekuje u testu.

5. djeljivBy

Pa, što ako bismo željeli stvoriti podudaranje koje definira je li broj djeljiv s drugim brojem? Za taj scenarij, morat ćemo negdje spremiti jedan od parametara.

Pogledajmo kako to možemo učiniti:

javna klasa IsDivisibleBy proširuje TypeSafeMatcher {private Integer djelitelj; // konstruktori @Override zaštićeni logički matchSafely (Integer dividend) {if (djelilac == 0) {return false; } return ((razdjelnik% dividende) == 0); } @Override public void descriTo (Opis opisa) {description.appendText ("djeljivo sa" + razdjelnik); } public static Matcher divisibleBy (Integer spliter) {return new IsDivisibleBy (djelitelj); }}

Dovoljno jednostavno, upravo smo dodali novi atribut našoj klasi i dodijelili ga tijekom gradnje. Zatim smo ga samo proslijedili kao parametar našoj statičkoj metodi:

@Test javna praznina givenAnEvenInteger_whenDivisibleByTwo_thenCorrect () {Integer ten = 10; Cijeli broj dva = 2; assertThat (deset, je (djeljivoBy (dva))); } @Test javna praznina givenAnOddInteger_whenNotDivisibleByTwo_thenCorrect () {Integer eleven = 11; Cijeli broj dva = 2; assertThat (jedanaest, je (nije (djeljivoBy (dva)))); }

I to je to! Već imamo svoj Matcher koji koristi više od jednog ulaza!

6. Zaključak

Hamcrest nudi podudaranja koja pokrivaju većinu slučajeva korištenja s kojima se programer obično mora suočiti prilikom stvaranja tvrdnji.

Štoviše, ako nije pokriven neki određeni slučaj, Hamcrest također daje podršku za stvaranje prilagođenih podudaranja koja će se koristiti u određenim scenarijima - kao što smo ovdje istražili. Jednostavno ih je stvoriti, a koriste se točno poput onih uključenih u knjižnicu.

Da biste dobili potpunu primjenu ovih primjera, molimo pogledajte GitHub projekt.


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