Hamcrest Common Core Matchers

Hamcrest Common Core Matchers

1. Visão geral

Neste tutorial rápido, vamos explorar oCoreMatchers class da popular estruturaHamcrest para escrever casos de teste simples e mais expressivos.

A idéia é fazer com que as declarações de asserção sejam lidas como linguagem natural.

2. Configuração do Hamcrest

Podemos usar o Hamcrest com Maven adicionando a seguinte dependência ao nosso arquivopom.xml:


    org.hamcrest
    java-hamcrest
    2.0.0.0
    test

A versão mais recente desta biblioteca pode sempre ser encontradahere.

3. Correspondentes principais comuns

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

Ois(T) usa um objeto como parâmetro para verificar a igualdade eis(Matcher<T>) usa outro matcher permitindo que a declaração de igualdade seja mais expressiva.

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)

OequalTo(T) pega um objeto como parâmetro e verifica sua igualdade em relação a outro objeto. 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"))));

Também podemos usarequalToObject(Object operand) – que verifica a igualdade e não impõe que dois objetos sejam do mesmo tipo estático:

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

3.3. not(T)areianot(Matcher<T>)

Osnot(T)enot(Matcher<T>) são usados ​​para verificar a não igualdade de objetos dados. Primeiro pega um objeto como argumento e depois pega outro 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() enullValue(Class<T>)

OnullValue() verifica o valornull  em relação ao objeto examinado. OnullValue(Class<T>) verifica a nulidade de determinado objeto de tipo de classe:

Integer nullObject = null;

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

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

These are a shortcut to frequently used is(not(nullValue))Estes verificam a igualdade não nula de um objeto ou com o tipo de classe:

Integer testNumber = 123;

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

3.6. instanceOf(Class<?>)

OinstanceOf(Class<?>) corresponde se o objeto examinado for uma instância do tipoClass especificado.

To verify, this method internally calls theisIntance(Object) of Class class:

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

3.7. isA(Class<T> type)

OisA(Class<T> type) é um atalho para oinstanceOf(Class<?>) acima. It takes the exact same type of argument as an instanceOf(Class<?>):

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

3.8. sameInstance()

OsameInstance() corresponde se duas variáveis ​​de referência apontam para o mesmo objeto em um heap:

String string1 = "Viseron";
String string2 = string1;

assertThat(string1, is(sameInstance(string2)));

3.9. any(Class<T>)

Oany(Class<T>)verifica se a classe é do mesmo tipo que o objeto real:

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>…)

Podemos usarallOf(Matcher<? extends T>…) para afirmar se o objeto real corresponde a todas as condições especificadas:

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

OanyOf(Matcher<? extends T>…) se comporta comoallOf(Matcher<? extends T>… ), mas corresponde se o objeto examinado corresponder a qualquer uma das condições especificadas:

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

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

Eles correspondem se a coleçãoIterable examinada corresponder a determinado objeto ou correspondência dentro dehasItem() ouhasItem(Matcher<? extends T>).

Vamos entender como isso funciona:

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>)

Como o nome sugere,both(Matcher<? extends T>) coincide quando ambas as condições especificadas correspondem ao objeto examinado:

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

eeither(Matcher<? extends T>)corresponde quando uma das condições especificadas corresponde ao objeto examinado:

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

4. Corda Comparação

Podemos usarcontainsString(String) oucontainsStringIgnoringCase(String) para afirmar se a string real contém a string de teste:

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

OustartsWith(String)estartsWithIgnoringCase(String) para afirmar se a string real começa com a string de teste:

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

Também podemos usarendsWith(String) orendsWithIgnoringCase(String) para afirmar se a string real termina com a string de teste:

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

5. Conclusão

Neste artigo, discutimos diferentes métodos deCoreMatchers class na bibliotecaHamcrest .

E, como sempre, o código-fonte dos exemplos pode ser encontradoover on GitHub.