Introduksjon til AssertJ

Denne artikkelen er en del av en serie: • Introduksjon til AssertJ (nåværende artikkel) • AssertJ for Guava

• AssertJs Java 8-funksjoner

• Tilpassede påstander med AssertJ

1. Oversikt

I denne artikkelen vil vi utforske AssertJ - et open source-fellesskapsdrevet bibliotek som brukes til å skrive flytende og rike påstander i Java-tester.

Denne artikkelen fokuserer på verktøy tilgjengelig i den grunnleggende AssertJ-modulen som kalles AssertJ-kjerne.

2. Maven avhengigheter

For å kunne bruke AssertJ, må du inkludere følgende avsnitt i pom.xml fil:

 org.assertj assertj-core 3.4.1 test 

Denne avhengigheten dekker bare de grunnleggende Java-påstandene. Hvis du vil bruke avanserte påstander, må du legge til flere moduler separat.

Merk at for Java 7 og tidligere bør du bruke AssertJ-kjerneversjon 2.x.x.

Siste versjoner finner du her.

3. Introduksjon

AssertJ tilbyr et sett med klasser og verktøy som lar oss skrive flytende og vakre påstander enkelt for:

  • Standard Java
  • Java 8
  • Guava
  • Joda Time
  • Neo4J og
  • Svingkomponenter

En detaljert liste over alle modulene er tilgjengelig på prosjektets hjemmeside.

La oss starte med noen få eksempler, rett fra AssertJs dokumentasjon:

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

Ovennevnte eksempler er bare toppen av isfjellet, men gi oss en oversikt over hvordan skriftlige påstander med dette biblioteket kan se ut.

4. AssertJ i aksjon

I denne delen vil vi fokusere på å sette opp AssertJ og utforske mulighetene.

4.1. Starter

Med glasset på biblioteket på en klassesti er det like enkelt å aktivere påstander som å legge til en enkelt statisk import til testklassen din:

importer statisk org.assertj.core.api.Assertions. *;

4.2. Skrive påstander

For å skrive en påstand, må du alltid starte med å sende objektet ditt til Assertions.assertThat () metode og deretter følger du med de faktiske påstandene.

Det er viktig å huske at i motsetning til noen andre biblioteker, hevder koden nedenfor ikke noe ennå og vil aldri mislykkes i en test:

hevder at (anyRefenceOrValue);

Hvis du bruker IDEs funksjoner for kodefullføring, blir det veldig enkelt å skrive AssertJ-påstander på grunn av de veldig beskrivende metodene. Slik ser det ut i IntelliJ IDEA 16:

IDEs funksjoner for kodefullføring

Som du kan se, har du dusinvis av kontekstuelle metoder å velge mellom, og de er bare tilgjengelige for String type. La oss utforske i detalj noe av dette API-et og se på noen spesifikke påstander.

4.3. Gjenstand Påstander

Objekter kan sammenlignes på forskjellige måter enten for å bestemme likhet mellom to objekter eller for å undersøke feltene til et objekt.

La oss se på to måter vi kan sammenligne likheten mellom to objekter. Gitt følgende to Hund gjenstander fido og fidosClone:

offentlig klasse Hund {privat strengnavn; privat flytevekt; // standard getters and setters} Dog fido = new Dog ("Fido", 5.25); Hund fidosClone = ny hund ("Fido", 5.25);

Vi kan sammenligne likhet med følgende påstand:

hevder at (fido) .isEqualTo (fidosClone);

Dette vil mislykkes som er lik() sammenligner objektreferanser. Hvis vi vil sammenligne innholdet deres i stedet, kan vi bruke det isEqualToComparingFieldByFieldRecursively () som så:

hevder at (fido) .isEqualToComparingFieldByFieldRecursively (fidosClone);

Fido og fidosClone er like når du gjør et rekursivt felt ved felt sammenligning fordi hvert felt av det ene objektet sammenlignes med feltet i det andre objektet.

Det er mange andre påstandsmetoder som gir forskjellige måter å sammenligne og trekke sammen objekter og å undersøke og hevde på sine felt. For å oppdage dem alle, se tjenestemannen AbstractObjectAssert dokumentasjon.

4.4. Boolsk Påstander

Noen enkle metoder finnes for sannhetstesting:

  • er sant()
  • isFalse ()

La oss se dem i aksjon:

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

4.5. Iterabel / Array Påstander

For en Iterabel eller en Array det er flere måter å hevde at innholdet deres eksisterer. En av de vanligste påstandene er å sjekke om en Iterabel eller Array inneholder et gitt element:

Listeliste = Arrays.asList ("1", "2", "3"); assertThat (liste) .contains ("1");

eller hvis en Liste er ikke tom:

assertThat (liste) .isNotEmpty ();

eller hvis en Liste starter med en gitt karakter. For eksempel “1”:

assertThat (list) .startsWith ("1");

Husk at hvis du vil opprette mer enn en påstand for det samme objektet, kan du enkelt koble dem sammen.

Her er et eksempel på en påstand som sjekker om en gitt liste ikke er tom, inneholder "1" -element, ikke inneholder null og inneholder rekkefølgen av elementene "2", "3":

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

Selvfølgelig finnes det mange flere påstander om disse typene. For å oppdage dem alle, se tjenestemannen AbstraktIterabelAssert dokumentasjon.

4.6. Karakter Påstander

Påstander om karaktertyper involverer for det meste sammenligninger og til og med å sjekke om en gitt karakter er fra en Unicode bord.

Her er et eksempel på en påstand som sjekker om et gitt tegn ikke er 'a', er i Unicode-tabellen, er større enn 'b' og er med små bokstaver:

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

For en detaljert liste over alle karaktertypers påstander, se AbstractCharacterAssert dokumentasjon.

4.7. Klasse Påstander

Påstander for Klasse type handler for det meste om å sjekke feltene, Klasse typer, tilstedeværelse av merknader og klassefinalitet.

Hvis du vil hevde den klassen Kjørbar er et grensesnitt, må du bare skrive:

assertThat (Runnable.class) .isInterface ();

eller hvis du vil sjekke om en klasse kan tildeles fra den andre:

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

Alt mulig Klasse påstander kan sees i AbstractClassAssert dokumentasjon.

4.8. Fil Påstander

Fil påstander handler om å sjekke om en gitt Fil forekomst eksisterer, er en katalog eller en fil, har bestemt innhold, er lesbar eller har gitt utvidelse.

Her kan du se et eksempel på en påstand som sjekker om en gitt fil eksisterer, er fil og ikke en katalog, kan være lesbar og skrivbar:

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

Alle mulige klassepåstander kan sees i AbstraktFilAssert dokumentasjon.

4.9. Dobbelt / Float / Heltall Påstander

Dobbelt / Float / Heltall og annen Nummer Typer

Numeriske påstander handler om å sammenligne numeriske verdier innenfor eller uten en gitt forskyvning. Hvis du for eksempel vil sjekke om to verdier er like i henhold til en gitt presisjon, kan vi gjøre følgende:

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

Legg merke til at vi bruker allerede importerte withPrecision (dobbel offset) hjelpermetode for å generere Offset gjenstander.

For flere påstander, besøk AbstractDoubleAssert-dokumentasjonen.

4.10. InputStream Påstander

Det er bare en InputStream-spesifikk påstand tilgjengelig:

  • hasSameContentAs (forventet InputStream)

og i aksjon:

assertThat (gitt) .harSameContentAs (forventet);

4.11. Kart Påstander

Kart påstander lar deg sjekke om et kart inneholder bestemte oppføringer, sett med oppføringer eller nøkler / verdier hver for seg.

Og her kan du se et eksempel på påstander som sjekker om et gitt kart ikke er tomt, inneholder talltast “2”, ikke inneholder talltast “10” og inneholder oppføring: nøkkel: 2, verdi: “a”:

assertThat (map) .isNotEmpty () .containsKey (2) .doNotContainKeys (10) .contains (entry (2, "a"));

For flere påstander, se AbstractMapAssert dokumentasjon.

4.12. Kastbar Påstander

Kastbar påstander tillater for eksempel: inspisere unntakets meldinger, stacktraces, forårsake kontroll eller verifisering om et unntak allerede er kastet.

La oss se på eksemplet på en påstand som sjekker om et gitt unntak ble kastet og har en melding som slutter med "c":

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

For flere påstander, se AbstractThrowableAssert dokumentasjon.

5. Beskrive påstander

For å oppnå enda høyere detaljnivå, kan du lage dynamisk genererte tilpassede beskrivelser for påstandene dine. Nøkkelen til å gjøre dette er as (strengbeskrivelse, objekt ... args) metode.

Hvis du definerer påstanden din slik:

assertThat (person.getAge ()). as ("% s alder skal være lik 100", person.getName ()) .isEqualTo (100);

dette er hva du får når du kjører tester:

[Alexs alder skulle være lik 100] forventet: men var:

6. Java 8

AssertJ utnytter Java 8s funksjonelle programmeringsfunksjoner fullt ut. La oss dykke inn i et eksempel og se det i aksjon. La oss først se hvordan vi gjør det i Java 7:

assertThat (fellowshipOfTheRing) .filteredOn ("race", HOBBIT) .containsOnly (sam, frodo, pippin, merry);

Her filtrerer vi en samling på løpet Hobbit, og i Java 8 kan vi gjøre noe slikt:

assertThat (fellowshipOfTheRing) .filteredOn (character -> character.getRace (). equals (HOBBIT)) .containsOnly (sam, frodo, pippin, merry);

Vi vil utforske AssertJs Java8-funksjoner i en fremtidig artikkel fra denne serien. Ovennevnte eksempler er hentet fra AssertJs nettsted.

7. Konklusjon

I denne artikkelen undersøkte vi kort mulighetene AssertJ gir oss sammen med de mest populære påstandene for kjernetypene Java.

Implementeringen av alle eksemplene og kodebiter kan bli funnet i et GitHub-prosjekt.

Neste » AssertJ for Guava

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