Hamcrest Common Core Matcher

1. Übersicht

In diesem kurzen Tutorial werden wir die CoreMatchers- Klasse aus dem beliebten Hamcrest-Framework zum Schreiben einfacher und aussagekräftigerer Testfälle untersuchen.

Die Idee ist, Aussagen zu machen, die wie natürliche Sprache gelesen werden.

2. Hamcrest-Setup

Wir können Hamcrest mit Maven verwenden, indem wir unserer Datei pom.xml die folgende Abhängigkeit hinzufügen :

 org.hamcrest java-hamcrest 2.0.0.0 test 

Die neueste Version dieser Bibliothek finden Sie immer hier.

3. Common Core Matcher

3.1. ist (T) und ist (Matcher)

Das is (T) nimmt ein Objekt als Parameter, um die Gleichheit zu überprüfen, und das (Matcher) nimmt einen anderen Matcher, wodurch die Gleichheitsaussage aussagekräftiger wird.

Wir können dies mit fast allen Methoden verwenden :

String testString = "hamcrest core"; assertThat(testString, is("hamcrest core")); assertThat(testString, is(equalTo("hamcrest core")));

3.2. gleich (T)

Die EqualTo (T) nimmt ein Objekt als Parameter und überprüft seine Gleichheit gegen einen anderen Gegenstand. Dies wird häufig verwendet mit is (Matcher) :

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

Wir können auch EqualToObject (Objektoperand) verwenden, der die Gleichheit überprüft und nicht erzwingt, dass zwei Objekte denselben statischen Typ haben sollten:

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

3.3. nicht (T) und nicht (Matcher)

Mit not (T) und not (Matcher) wird die Ungleichheit bestimmter Objekte überprüft. Nehmen Sie erstens ein Objekt als Argument und zweitens einen anderen Matcher:

String testString = "troy kingdom"; assertThat(testString, not("german kingdom")); assertThat(testString, is(not(equalTo("german kingdom")))); assertThat(testString, is(not(instanceOf(Integer.class))));

3.4. nullValue () und nullValue (Klasse)

Die nullValue () -Überprüfung für das untersuchte Objekt auf Nullwert . Der nullValue (Klasse) prüft die Nullfähigkeit eines bestimmten Klassentypobjekts:

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

3.5. notNullValue () und notNullValue (Klasse)

Dies ist eine Verknüpfung zu häufig verwendeten is (nicht (nullValue)) . Diese prüfen auf Nicht-Null-Gleichheit eines Objekts oder mit dem Klassentyp:

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

3.6. instanceOf (Klasse)

Die Instanz von (Klasse) stimmt überein, wenn das untersuchte Objekt eine Instanz der angegebenen Klasse istArt.

Zur Überprüfung ruft diese Methode intern die isIntance (Object) der Class- Klasse auf:

assertThat("instanceOf example", is(instanceOf(String.class)));

3.7. isA (Klassentyp)

Das isA (Klassentyp) ist eine Verknüpfung zu der obigen Instanz von (Class) . Es wird genau derselbe Argumenttyp wie für instanceOf (Class) verwendet :

assertThat("Drogon is biggest dragon", isA(String.class));

3.8. sameInstance ()

Die sameInstance () übereinstimmt , wenn zwei Bezugsgrößen in einem Haufen auf das gleiche Objekt zeigen:

String string1 = "Viseron"; String string2 = string1; assertThat(string1, is(sameInstance(string2)));

3.9. beliebig (Klasse)

Die any (Klasse) prüft, ob die Klasse vom gleichen Typ wie das tatsächliche Objekt ist:

assertThat("test string", is(any(String.class))); assertThat("test string", is(any(Object.class)));

3.10. allOf (Matcher…) und anyOf (Matcher…)

Wir können allOf (Matcher…) verwenden , um festzustellen , ob das tatsächliche Objekt mit allen angegebenen Bedingungen übereinstimmt:

String testString = "Achilles is powerful"; assertThat(testString, allOf(startsWith("Achi"), endsWith("ul"), containsString("Achilles")));

Die Bestimmungen haften (Matcher ...) verhält sich wie allof (Matcher ...) aber Streichhölzer , wenn das geprüfte Objekt eine der angegebenen Bedingungen erfüllt:

String testString = "Hector killed Achilles"; assertThat(testString, anyOf(startsWith("Hec"), containsString("baeldung")));

3.11. hasItem (T) und hasItem (Matcher)

Diese stimmen überein, wenn die untersuchte Iterable- Sammlung mit einem bestimmten Objekt oder Matcher in hasItem () oder hasItem (Matcher) übereinstimmt .

Lassen Sie uns verstehen, wie das funktioniert:

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

In ähnlicher Weise können wir auch mit hasItems (T…) und hasItems (Matcher…) gegen mehr als ein Element vorgehen :

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

3.12. sowohl (Matcher) als auch entweder (Matcher)

As the name suggests, the both(Matcher) matches when both of the specified conditions match the examined object:

String testString = "daenerys targaryen"; assertThat(testString, both(startsWith("daene")).and(containsString("yen")));

and either(Matcher)matches when either of the specified conditions matches the examined object:

String testString = "daenerys targaryen"; assertThat(testString, either(startsWith("tar")).or(containsString("targaryen")));

4. String Comparison

We can use containsString(String) or containsStringIgnoringCase(String) to assert if the actual string contains test string:

String testString = "Rhaegar Targaryen"; assertThat(testString, containsString("aegar")); assertThat(testString, containsStringIgnoringCase("AEGAR"));

Or startsWith(String) and startsWithIgnoringCase(String) to assert if the actual string starts with test string:

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

We can also use endsWith(String) or endsWithIgnoringCase(String) to assert if the actual string ends with test string:

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

5. Conclusion

In diesem Artikel haben wir verschiedene Methoden der CoreMatchers- Klasse in der Hamcrest- Bibliothek besprochen .

Und wie immer finden Sie den Quellcode für die Beispiele auf GitHub.