- Objetos:
equalTo, hasToString, instanceOf, isCompatibleType, notNullValue, nullValue, sameInstance - Texto:
equalToIgnoringCase, equalToIgnoringWhiteSpace, containsString, endsWith, startsWith - Números:
closeTo, greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - Lógico:
allOf, anyOf, not - Coleções:
array(Compare uma matriz com uma variedade de Matchers),hasEntry, hasKey, hasValue, hasItem, hasItems, hasItemInArray
A amostra de código a seguir mostra alguns exemplos de uso do Hamcrest em uma aula de teste do Junit 5.
Listagem 1. Usando o hamcrest em uma aula de teste do Junit 5 (hamcrestdemotest.java)
package com.javaworld.geekcap.hamcrest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
class HamcrestDemoTest {
@Test
@DisplayName("String Examples")
void stringExamples() {
String s1 = "Hello";
String s2 = "Hello";
assertThat("Comparing Strings", s1, is(s2));
assertThat(s1, equalTo(s2));
assertThat("ABCDE", containsString("BC"));
assertThat("ABCDE", not(containsString("EF")));
}
@Test
@DisplayName("List Examples")
void listExamples() {
// Create an empty list
List list = new ArrayList();
assertThat(list, isA(List.class));
assertThat(list, empty());
// Add a couple items
list.add("One");
list.add("Two");
assertThat(list, not(empty()));
assertThat(list, hasSize(2));
assertThat(list, contains("One", "Two"));
assertThat(list, containsInAnyOrder("Two", "One"));
assertThat(list, hasItem("Two"));
}
@Test
@DisplayName("Number Examples")
void numberExamples() {
assertThat(5, lessThan(10));
assertThat(5, lessThanOrEqualTo(5));
assertThat(5.01, closeTo(5.0, 0.01));
}
}
Uma coisa que eu gosto no Hamcrest é que é muito fácil de ler. Por exemplo, “assert that name is Steve”“assert that list has size 2,” e “assert that list has item Two”Todos liam como frases regulares no idioma inglês. Na Listagem 1, o stringExamples O teste primeiro compara dois Strings para igualdade e depois verifica as substâncias usando o containsString() método. Um primeiro argumento opcional para assertThat() é a “razão” do teste, que é a mesma que a mensagem em uma afirmação JUNIT e será exibida se o teste falhar. Por exemplo, se adicionarmos o teste a seguir, veríamos o erro de afirmação abaixo dele:
assertThat("Comparing Strings", s1, is("Goodbye"));
java.lang.AssertionError: Comparing Strings
Expected: is "Goodbye"
but: was "Hello"
Observe também que podemos combinar o not() Método lógico com uma condição para verificar se uma condição não é verdadeira. Na Listagem 1, verificamos se o ABCDE String não contém substring EF usando o not() método combinado com containsString().
