Hamcrest Common Core Matches

1. Общ преглед

В този бърз урок ще изследваме класа CoreMatchers от популярната рамка на Hamcrest за писане на прости и по-изразителни тестови случаи.

Идеята е да накарате твърдения за твърдение да се четат като естествен език.

2. Настройка на Hamcrest

Можем да използваме Hamcrest с Maven, като добавим следната зависимост към нашия файл pom.xml :

 org.hamcrest java-hamcrest 2.0.0.0 test 

Най-новата версия на тази библиотека винаги може да бъде намерена тук.

3. Често срещани ядра

3.1. е (T) и е (Matcher)

Is (T) приема обект като параметър за проверка на равенството и е (Matcher) взема друго съвпадение, което позволява изразът за равенство да бъде по-изразителен.

Можем да използваме това с почти всички методи :

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

3.2. равно на (T)

В equalTo (Т) се обект като параметър и проверява му равенство срещу друг обект. Това често се използва с 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"))));

Можем също да използваме еквивалентен обект (операнд на обект) - който проверява равенството и не налага, че два обекта трябва да имат един и същ статичен тип:

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

3.3. не (T) и не (Matcher)

Най- не (Т) и не (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 () и nullValue (клас)

Проверката nullValue () за нулева стойност спрямо изследвания обект. На nullValue (клас) на проверките за nullability на даден тип клас обект:

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

3.5. notNullValue () и notNullValue (клас)

Това са пряк път към често използвания is (not (nullValue)) . Те проверяват за ненулево равенство на обект или с типа клас:

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

3.6. instanceOf (клас)

В instanceOf (клас) съвпада ако изследвани обекта е копие на определен класТип.

За да провери, този метод вътрешно извиква isIntance (Object) на класа Class :

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

3.7. isA (тип клас)

В ISA (тип клас) е пряк път към горната instanceOf (клас) . Той приема точно същия тип аргумент като instanceOf (Class) :

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

3.8. sameInstance ()

В sameInstance () се използва, ако двете референтни променливи сочат към един и същ обект в купчина:

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

3.9. всеки (клас)

На всички (клас) на проверките ако класът е от същия тип като действителен обект:

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

3.10. allOf (Matcher ...) и anyOf (Matcher ...)

Можем да използваме allOf (Matcher ...), за да твърдим дали действителният обект съвпада с всички посочени условия:

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

В anyOf (съотнасяне на ...) се държи като allOf (Matcher ...) , но мачове, ако разгледа обекта съответстват на някое от посочените условия:

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

3.11. hasItem (T) и hasItem (Matcher)

Те съвпадат, ако изследваната Iterable колекция съвпада с даден обект или съвпадение вътре в hasItem () или hasItem (Matcher) .

Нека разберем как работи това:

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

По подобен начин можем да твърдим срещу повече от един елемент, като използваме hasItems (T ...) и hasItems (Matcher ...) :

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

3.12. както (Matcher), така и (Matcher)

Както подсказва името, и двете (Matcher) съвпадат, когато и двете от посочените условия съвпадат с изследвания обект:

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

и всеки (Matcher) съвпада, когато някое от посочените условия съвпада с разглеждания обект:

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

4. Сравнение на низове

Можем да използва containsString (String) или containsStringIgnoringCase (String), за да твърдим дали действителният низ съдържа тестов низ:

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

Или startWith (String) и startWithIgnoringCase (String), за да твърди дали действителният низ започва с тестов низ:

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

Също така можем да използваме ENDWith (String) или ENDWithIgnoringCase (String), за да твърдим дали действителният низ завършва с тестов низ:

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

5. Заключение

В тази статия, ние обсъдихме различни методи за CoreMatchers клас в Hamcrest библиотека.

И както винаги, изходният код за примерите може да бъде намерен в GitHub.