• 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().