Hamcrest Common Core Matchers

Hamcrest Common Core Matchers

1. обзор

В этом кратком руководстве мы рассмотрим классCoreMatchers из популярного фреймворкаHamcrest для написания простых и более выразительных тестовых примеров.

Идея состоит в том, чтобы утверждения утверждений читались как естественный язык.

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

Мы можем использовать Hamcrest с Maven, добавив следующую зависимость в наш файлpom.xml:


    org.hamcrest
    java-hamcrest
    2.0.0.0
    test

Последнюю версию этой библиотеки всегда можно найтиhere.

3. Common Core Matchers

3.1. is(T) иis(Matcher<T>)

is(T) принимает объект в качестве параметра для проверки равенства, аis(Matcher<T>) принимает другой сопоставитель, позволяющий сделать выражение равенства более выразительным.

We can use this with almost all of the methods:

String testString = "hamcrest core";

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

3.2. equalTo(T)с

equalTo(T) принимает объект в качестве параметра и проверяет его равенство другому объекту. This is frequently used with is(Matcher<T>):

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

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

Мы также можем использоватьequalToObject(Object operand) – w, который проверяет равенство и не требует, чтобы два объекта были одного и того же статического типа:

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

3.3. not(T)песокnot(Matcher<T>)

not(T) иnot(Matcher<T>) используются для проверки неравенства данных объектов. Первый принимает объект в качестве аргумента, а второй - другой сопоставитель:

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(Class<T>)

СхемаnullValue() дляnull value по отношению к исследуемому объекту. СхемаnullValue(Class<T>) на предмет допустимости значения NULL для данного объекта типа класса:

Integer nullObject = null;

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

3.5. notNullValue() иnotNullValue(Class<T>)

These are a shortcut to frequently used is(not(nullValue)) Эти проверки на ненулевое равенство объекта или с типом класса:

Integer testNumber = 123;

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

3.6. instanceOf(Class<?>)с

instanceOf(Class<?>) соответствует, если исследуемый объект является экземпляром указанного стиляClass .

To verify, this method internally calls theisIntance(Object) of Class класс:

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

3.7. isA(Class<T> type)

isA(Class<T> type) - это ярлык к указанному вышеinstanceOf(Class<?>). It takes the exact same type of argument as an 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. any(Class<T>)с

any(Class<T>)проверяет, принадлежит ли класс тому же типу, что и фактический объект:

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

3.10. allOf(Matcher<? extends T>…) and anyOf(Matcher<? extends T>…)с

Мы можем использоватьallOf(Matcher<? extends T>…), чтобы утверждать, соответствует ли фактический объект всем указанным условиям:

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

anyOf(Matcher<? extends T>…) ведет себя какallOf(Matcher<? extends T>… ), но соответствует, если исследуемый объект соответствует любому из указанных условий:

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

3.11. hasItem(T) иhasItem(Matcher<? extends T>)

Они совпадают, если исследуемая коллекцияIterable совпадает с заданным объектом или сопоставителем внутриhasItem() илиhasItem(Matcher<? extends T>).

Давайте разберемся, как это работает:

List list = Lists.newArrayList("java", "spring", "example");

assertThat(list, hasItem("java"));
assertThat(list, hasItem(isA(String.class)));

Similarly, we can also assert against more than one items using hasItems(T…)and hasItems(Matcher<? extends T>…):

List list = Lists.newArrayList("java", "spring", "example");

assertThat(list, hasItems("java", "example"));
assertThat(list, hasItems(isA(String.class), endsWith("ing")));

3.12. both(Matcher<? extends T>) and either(Matcher<? extends T>)с

Как следует из названия,both(Matcher<? extends T>) перехватывает, когда оба указанных условия соответствуют исследуемому объекту:

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

иeither(Matcher<? extends T>)matches, когда любое из указанных условий соответствует исследуемому объекту:

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

4. строка сравнение

Мы можем использоватьcontainsString(String) илиcontainsStringIgnoringCase(String) to assert, если фактическая строка содержит тестовую строку:

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

ИлиstartsWith(String) иstartsWithIgnoringCase(String) to утверждают, если фактическая строка начинается с тестовой строки:

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

Мы также можем использоватьendsWith(String) orendsWithIgnoringCase(String), чтобы утверждать, заканчивается ли фактическая строка тестовой строкой:

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

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

В этой статье мы обсудили различные методы классификацииCoreMatchers в библиотекеHamcrest .

И, как всегда, исходный код примеров можно найтиover on GitHub.