Hamcrest Object Matchers

1. Oversikt

Hamcrest gir matchere for å gjøre enhetstest påstander enklere og mer leselig. Du kan komme i gang med å utforske noen av de tilgjengelige matcherne her.

I denne raske opplæringen vil vi dykke dypere inn i objektmatchere.

2. Oppsett

For å få Hamcrest trenger vi bare legg til følgende Maven-avhengighet til vår pom.xml:

 org.hamcrest java-hamcrest 2.0.0.0 test 

Den siste Hamcrest-versjonen finner du på Maven Central.

3. Objektmatchere

Objektmatchere er ment å utføre kontroller av objektets egenskaper.

Før vi ser på matcherne, lager vi et par bønner for å gjøre eksemplene enkle å forstå.

Vårt første objekt kalles plassering og har ingen egenskaper:

offentlig klasse plassering {}

Vi vil kalle den andre bønnen vår By og legg til følgende implementering i den:

offentlig klasse By utvider Location {String name; Strengstat; // 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.navnet); sb.append (","); sb.append ("State:"); sb.append (denne tilstanden); sb.append ("]"); returner sb.toString (); }}

Noter det By strekker plassering. Vi bruker det senere. La oss starte med objektmatcherne!

3.1. hasToString

Som navnet sier, den hasToString metoden verifiserer at bestemt objekt har en toString metode som returnerer en spesifikk String:

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

Så, vi lager en By og verifisere at det er toString metoden returnerer String som vi vil ha. Vi kan ta dette et skritt videre, og i stedet for å sjekke om det er likhet, kan du se etter en annen tilstand:

@Test offentlig ugyldig gittACity_whenHasToStringEqualToIgnoringCase_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (city, hasToString (equalToIgnoringCase ("[NAVN: SAN FRANCISCO, STATE: CA]"))); }

Som vi kan se, hasToString er overbelastet og kan motta både a String eller en tekstmatcher som parameter. Så vi kan også gjøre ting som:

@Test offentlig ugyldig gittACity_whenHasToStringEmptyOrNullString_thenCorrect () {City city = new City (null, null); assertThat (city, hasToString (emptyOrNullString ())); }

Du finner mer informasjon om tekstmatchere her. La oss nå gå til neste objektmatcher.

3.2. typeKompatibel med

Denne matcheren representerer en er en forhold. Her kommer vår plassering superklasse i spill:

@Test offentlig ugyldig gittACity_whenTypeCompatibleWithLocation_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (city.getClass (), er (typeCompatibleWith (Location.class))); }

Dette sier det By er en Plassering, som er sant, og denne testen skal bestå. Også, hvis vi ønsket å teste den negative saken:

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

Selvfølgelig, vår By klasse er ikke en String.

Til slutt, merk at alle Java-objekter skal bestå følgende test:

@Test offentlig ugyldig gittACity_whenTypeCompatibleWithObject_thenCorrect () {City city = new City ("San Francisco", "CA"); assertThat (city.getClass (), er (typeCompatibleWith (Object.class))); }

Husk det matcheren er består av en innpakning over en annen matcher med det formål å gjøre hele påstanden mer lesbar.

4. Konklusjon

Hamcrest gir en enkel og ren måte å lage påstander på. Det er et bredt utvalg av matchere som gjør hver utviklers liv enklere, så vel som hvert prosjekt mer leselig.

Og objektmatchere er definitivt en grei måte å sjekke klasseegenskaper på.

Som alltid finner du full implementering på GitHub-prosjektet.


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