Hamcrest Object Matchers

1. Oversigt

Hamcrest leverer matchere til at gøre enhedstest påstande enklere og mere læselig. Du kan komme i gang med at udforske nogle af de tilgængelige matchere her.

I denne hurtige vejledning dykker vi dybere ned i objektmatchere.

2. Opsætning

For at få Hamcrest skal vi bare tilføj følgende Maven-afhængighed til vores pom.xml:

 org.hamcrest java-hamcrest 2.0.0.0 test 

Den seneste Hamcrest-version kan findes på Maven Central.

3. Objekt Matchers

Objektmatchere er beregnet til at udføre kontrol af objektets egenskaber.

Før vi undersøger matcherne, opretter vi et par bønner for at gøre eksemplerne enkle at forstå.

Vores første objekt kaldes Beliggenhed og har ingen egenskaber:

offentlig klasse placering {}

Vi navngiver vores anden bønne By og tilføj følgende implementering til det:

offentlig klasse By udvider Location {String name; Streng tilstand; // standardkonstruktør, getters og settere @ Override public String toString () {if (this.name == null && this.state == null) {return null; } StringBuilder sb = ny StringBuilder (); sb.append ("["); sb.append ("Navn:"); sb.append (dette.navn); sb.append (","); sb.append ("State:"); sb.append (denne tilstand); sb.append ("]"); returner sb.toString (); }}

Noter det By strækker sig Beliggenhed. Vi bruger det senere. Lad os nu starte med objektmatcherne!

3.1. hasToString

Som navnet siger, er hasToString metode verificerer, at bestemt objekt har en toString metode, der returnerer en bestemt Snor:

@Test offentligt ugyldigt givetACity_whenHasToString_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (by, hasToString ("[Navn: San Francisco, Stat: CA]")); }

Så vi opretter en By og verificere, at dens toString metoden returnerer Snor at vi ønsker. Vi kan tage dette et skridt videre, og i stedet for at kontrollere for lighed, se efter en anden tilstand:

@Test offentligt ugyldigt givetACity_whenHasToStringEqualToIgnoringCase_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (by, hasToString (equalToIgnoringCase ("[NAVN: SAN FRANCISCO, STATE: CA]"))); }

Som vi kan se, hasToString er overbelastet og kan modtage begge a Snor eller en tekst matcher som parameter. Så vi kan også gøre ting som:

@Test offentligt ugyldigt givetACity_whenHasToStringEmptyOrNullString_thenCorrect () {City city = new City (null, null); assertThat (by, hasToString (tomOrNullString ())); }

Du kan finde mere information om tekstmatchere her. Lad os nu gå til den næste objektmatcher.

3.2. typeKompatibelMed

Denne matcher repræsenterer en er en forhold. Her kommer vores Beliggenhed superklasse i spil:

@Test offentligt ugyldigt givetACity_whenTypeCompatibleWithLocation_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (city.getClass (), er (typeCompatibleWith (Location.class))); }

Dette siger det By er en Beliggenhed, hvilket er sandt, og denne test skal bestå. Også, hvis vi ville teste den negative sag:

@Test offentligt ugyldigt givetACity_whenTypeNotCompatibleWithString_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (city.getClass (), er (ikke (typeCompatibleWith (String.class)))); }

Selvfølgelig vores By klasse er ikke en Snor.

Endelig skal du bemærke, at alle Java-objekter skal bestå følgende test:

@Test offentligt ugyldigt givetACity_whenTypeCompatibleWithObject_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (city.getClass (), er (typeCompatibleWith (Object.class))); }

Husk det matcheren er består af en indpakning over en anden matcher med det formål at gøre hele påstanden mere læselig.

4. Konklusion

Hamcrest giver en enkel og ren måde at skabe påstande på. Der er en bred vifte af matchere, der gør hver udviklers liv enklere såvel som hvert projekt mere læsbart.

Og objektmatchere er bestemt en ligetil måde at kontrollere klasseegenskaber på.

Som altid finder du den fulde implementering af GitHub-projektet.


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