Hamcrest Common Core Matchers

1. Oversigt

I denne hurtige vejledning undersøger vi CoreMatchers klasse fra den populære Hamcrest-ramme til at skrive enkle og mere udtryksfulde testsager.

Ideen er at gøre erklæringer, der læses som naturlige sprog.

2. Hamcrest-opsætning

Vi kan bruge Hamcrest med Maven ved at tilføje følgende afhængighed til vores pom.xml fil:

 org.hamcrest java-hamcrest 2.0.0.0 test 

Den seneste version af dette bibliotek kan altid findes her.

3. Almindelige kernematchere

3.1. er (T) og er (Matcher)

Det er (T) tager et objekt som en parameter til at kontrollere lighed og er (Matcher) tager en anden matcher, der tillader ligestillingserklæring at være mere ekspressiv.

Vi kan bruge dette med næsten alle metoderne:

Streng testString = "hamcrest kerne"; assertThat (testString, er ("hamcrest core")); assertThat (testString, is (equalTo ("hamcrest core")));

3.2. equalTo (T)

Det equalTo (T) tager et objekt som parameter og kontrollerer dets lighed med et andet objekt. Dette bruges ofte med er (Matcher):

String actualString = "equalTo match"; Liste actualList = Lists.newArrayList ("equalTo", "match"); assertThat (actualString, is (equalTo ("equalTo match"))); assertThat (actualList, is (equalTo (Lists.newArrayList ("equalTo", "match")));

Vi kan også bruge equalToObject (objektoperand) - som kontrollerer lighed og ikke håndhæver, at to objekter skal have samme statiske type:

Objekt original = 100; assertThat (original, equalToObject (100));

3.3. ikke (T) og ikke (Matcher)

Det ikke (T) og ikke (Matcher) bruges til at kontrollere ikke-lighed mellem givne objekter. Først tager et objekt som et argument, og det andet tager en anden matcher:

String testString = "troy kingdom"; assertThat (testString, ikke ("tysk kongerige")); assertThat (testString, er (ikke (equalTo ("tysk kongerige")))); assertThat (testString, er (ikke (instanceOf (Integer.class))));

3.4. nullValue () og nullValue (klasse)

Det nullValue () se efter nul værdi mod det undersøgte objekt. Det nullValue (klasse) kontrollerer for ugyldighed af givne klassetype-objekt:

Heltal nullObject = null; assertThat (nullObject, er (nullValue ())); assertThat (nullObject, er (nullValue (Integer.class)));

3.5. notNullValue () og notNullValue (klasse)

Disse er en genvej til ofte anvendte er (ikke (nullValue)). Disse kontrollerer for ikke-nulstilling af et objekt eller med klassetypen:

Heltals testNummer = 123; assertThat (testNumber, is (notNullValue ())); assertThat (testNumber, is (notNullValue (Integer.class)));

3.6. instanceOf (klasse)

Det instanceOf (klasse) matcher, hvis det undersøgte objekt er en forekomst af det specificerede Klassetype.

For at bekræfte kalder denne metode interntisIntance (Objekt) af Klasse klasse:

assertThat ("eksempel på eksempel" er (eksempel på (streng.klasse)));

3.7. er en(Klassetype)

Det isA (klassetype) er en genvej til ovenstående instanceOf (klasse). Det tager nøjagtig samme type argument som et instanceOf (klasse):

hævder, at ("Drogon er den største drage", isA (String.class));

3.8. sameInstance ()

Det sameInstance () matcher, hvis to referencevariabler peger på det samme objekt i en bunke:

String string1 = "Viseron"; Strengstreng2 = streng1; assertThat (streng1, er (sameInstance (streng2)));

3.9. enhver (klasse)

Det enhver (klasse)kontrollerer, om klassen er af samme type som det faktiske objekt:

assertThat ("teststreng", er (enhver (String.class))); assertThat ("teststreng", er (enhver (Object.class)));

3.10. allOf (Matcher ...) og anyOf (Matcher ...)

Vi kan bruge allOf (Matcher ...) at hævde, om det faktiske objekt matcher alle de angivne betingelser:

String testString = "Achilles er stærk"; assertThat (testString, allOf (startsWith ("Achi"), endsWith ("ul"), indeholderString ("Achilles")));

Det anyOf (Matcher ...) opfører sig som allOf (Matcher ...) men matcher, hvis det undersøgte objekt matcher en af ​​de angivne betingelser:

String testString = "Hector dræbte Achilles"; assertThat (testString, anyOf (startsWith ("Hec"), indeholderString ("baeldung")));

3.11. hasItem (T) og hasItem (Matcher)

Disse stemmer overens, hvis de undersøges Iterabel samling matcher med et givet objekt eller en matcher indeni hasItem () eller hasItem (Matcher).

Lad os forstå, hvordan dette fungerer:

List list = Lists.newArrayList ("java", "spring", "baeldung"); assertThat (liste, hasItem ("java")); assertThat (liste, hasItem (isA (String.class)));

Tilsvarende det kan vi også hævder mod mere end et element ved hjælp af hasItems (T…) og hasItems (Matcher ...):

List list = Lists.newArrayList ("java", "spring", "baeldung"); assertThat (liste, hasItems ("java", "baeldung")); assertThat (liste, hasItems (isA (String.class), slutter med ("ing")));

3.12. både (Matcher) og enten (Matcher)

Som navnet antyder, er begge (Matcher) matcher, når begge de angivne betingelser matcher det undersøgte objekt:

String testString = "daenerys targaryen"; assertThat (testString, begge (startsWith ("daene")). og (indeholderString ("yen")));

og enten (Matcher)matcher, når en af ​​de angivne betingelser matcher det undersøgte objekt:

String testString = "daenerys targaryen"; assertThat (testString, enten (startsWith ("tar")). eller (indeholderString ("targaryen")));

4. Snor Sammenligning

Vi kan bruge indeholderString (streng) eller indeholderStringIgnoringCase (streng) at hævde, om den aktuelle streng indeholder teststreng:

String testString = "Rhaegar Targaryen"; assertThat (testString, containString ("aegar")); assertThat (testString, containStringIgnoringCase ("AEGAR"));

Eller starter med (streng) og startsWithIgnoringCase (streng) at hævde, om den aktuelle streng starter med teststreng:

assertThat (testString, startsWith ("Rhae")); assertThat (testString, startsWithIgnoringCase ("rhae"));

Vi kan også bruge slutter med (streng) eller endsWithIgnoringCase (String) at hævde, om den aktuelle streng slutter med teststreng:

assertThat (testString, endsWith ("aryen")); assertThat (testString, endsWithIgnoringCase ("ARYEN"));

5. Konklusion

I denne artikel diskuterede vi forskellige metoder til CoreMatchers klasse i Hamcrest bibliotek.

Og som altid kan kildekoden til eksemplerne findes på GitHub.


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