Asserções de forma fluída para o Java.

Para que serve

AssertJ é uma biblioteca Java que fornece um conjunto rico de asserções e mensagens de erro verdadeiramente úteis, melhora a legibilidade do código de teste e é projetada para ser fácil de usar em seu IDE favorito.

Funcionalidades

  • Asserções com recursos do Java 8
  • Mensagens de erro descritivas
  • Conjuntos de asserções (SoftAssertions)

Iniciando uma asserção

.assertThat(resultado)              // Tudo inicia a partir do assertThat()
    .isEqualTo(esperado)            // seguido dos método que olharemos

Asserções para itens individuais

.assertThat(resultado)
    .as("Nome: %s", nome)   // Mensagem descritiva em caso de falha.
    .isEqualTo(algo)        // Equals clássico

Asserções para coleções ou arrays

.assertThat(colecao)
    .filteredOn(predicate, lambda ou field)   // Filtra os itens
    .containsOnly(item...)                    // Exatamente os itens existentes
    .contains(item...)                        // Um ou mais itens que devem existir
    .doesNotContain(item...)                  // Um ou mais itens que não devem existir
    .extracting(lambda ou field)              // Extrai campo(s) dos itens do array
    .flatExtracting(lambda ou field)          // Extrai campo(s) do tipo lista de cada item do array

Testando uma exceção

.assertThatThrownBy(() -> acao())           // Ação que dispara uma exceção
    .isInstanceOf(Exception.class)          // Valida o tipo da exceção
    .hasMessageContaining("Erro X")         // Valida a mensagem
    
//ou
assertThatExceptionOfType(Exception.class)  // Valida o tipo da exceção
    .isThrownBy()                           // Ação que dispara uma exceção
    .withMessage("%s!", "Erro X")           // Valida a mensagem
    .withMessageContaining("Erro X")        // Ou parte da mensagem

Notas curiosas

  • Além do Core, o AssertJ possui módulos extras para Guava, Joda, Neo4J, Databases e Swing.
  • Você pode encadear um conjunto de assertions com o SoftAssertions coletando todos os erros ao mesmo tempo em vez de parar em cada Asserção individual.
  • Você pode fazer asserção com o conteúdo de um arquivo utilizando assertThat(contentOf(arquivo)).

Mais informações: