Recursos do Java 8 da AssertJ

Recursos do Java 8 da AssertJ

*1. Visão geral *

Este artigo concentra-se nos recursos relacionados ao Java8 de https://joel-costigliola.github.io/assertj/[AssertJunette e é o terceiro artigo da série.

Se você estiver procurando informações gerais sobre seus principais recursos, consulte o primeiro artigo da série no link:/Introduction-to-assertj [Introdução ao AssertJ] e, em seguida, no link:/assertJ-for-goiaba [AssertJ for Guava ]

===* 2. Dependências do Maven *

O suporte do Java 8 está incluído no módulo principal do AssertJ Core desde a versão 3.5.1. Para usar o módulo, você precisará incluir a seção a seguir no seu arquivo pom.xml:

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.5.1</version>
    <scope>test</scope>
</dependency>

Essa dependência cobre apenas as asserções Java básicas. Se você deseja usar as asserções avançadas, precisará adicionar módulos adicionais separadamente.

A versão mais recente do Core pode ser encontrada aqui.

===* 3. Recursos do Java 8 *

O AssertJ aproveita os recursos do Java 8, fornecendo métodos auxiliares especiais e novas asserções para os tipos do Java 8.

====* 3.1 Optional asserções *

Vamos criar uma instância Optional simples:

Optional<String> givenOptional = Optional.of("something");

Agora podemos verificar facilmente se um Optional contém algum valor e qual é esse valor que contém:

assertThat(givenOptional)
  .isPresent()
  .hasValue("something");

====* 3.2 Predicate asserções *

Vamos criar uma instância Predicate simples, verificando o comprimento de uma String:

Predicate<String> predicate = s -> s.length() > 4;

Agora você pode facilmente verificar quais Strings são rejeitadas ou aceitas pelo _Predicate: _

assertThat(predicate)
  .accepts("aaaaa", "bbbbb")
  .rejects("a", "b")
  .acceptsAll(asList("aaaaa", "bbbbb"))
  .rejectsAll(asList("a", "b"));

====* 3.3 LocalDate asserções *

Vamos começar definindo dois objetos LocalDate:

LocalDate givenLocalDate = LocalDate.of(2016, 7, 8);
LocalDate todayDate = LocalDate.now();

Agora você pode facilmente verificar se uma determinada data é anterior/posterior a uma determinada data ou hoje:

assertThat(givenLocalDate)
  .isBefore(LocalDate.of(2020, 7, 8))
  .isAfterOrEqualTo(LocalDate.of(1989, 7, 8));

assertThat(todayDate)
  .isAfter(LocalDate.of(1989, 7, 8))
  .isToday();

====* 3.4 Declarações LocalDateTime *

As asserções LocalDateTime funcionam de maneira semelhante a LocalDate‘s , _ mas não compartilham o método _isToday.

Vamos criar um exemplo de objeto LocalDateTime:

LocalDateTime givenLocalDate = LocalDateTime.of(2016, 7, 8, 12, 0);

E agora você pode verificar:

assertThat(givenLocalDate)
  .isBefore(LocalDateTime.of(2020, 7, 8, 11, 2));

====* 3.5 Declarações LocalTime *

As asserções LocalTime funcionam de maneira semelhante a outras asserções java.util.time.* _, Mas elas têm um método exclusivo: _hasSameHourAs.

Vamos criar um exemplo de objeto LocalTime:

LocalTime givenLocalTime = LocalTime.of(12, 15);

e agora você pode afirmar:

assertThat(givenLocalTime)
  .isAfter(LocalTime.of(1, 0))
  .hasSameHourAs(LocalTime.of(12, 0));

3.6 Método auxiliar FlatExtracting

O FlatExtracting é um método utilitário especial que utiliza lambdas do Java 8 para extrair propriedades de Iterable elements .

Vamos criar uma List simples com objetos LocalDate:

List<LocalDate> givenList = asList(ofYearDay(2016, 5), ofYearDay(2015, 6));

agora podemos verificar facilmente se esta List contém pelo menos um objeto LocalDate com o ano de 2015:

assertThat(givenList)
  .flatExtracting(LocalDate::getYear)
  .contains(2015);

o método flatExtracting não nos limita à extração de campo. Nós sempre podemos fornecê-lo com qualquer função:

assertThat(givenList)
  .flatExtracting(LocalDate::isLeapYear)
  .contains(true);

ou até:

assertThat(givenList)
  .flatExtracting(Object::getClass)
  .contains(LocalDate.class);

Você também pode extrair várias propriedades de uma vez:

assertThat(givenList)
  .flatExtracting(LocalDate::getYear, LocalDate::getDayOfMonth)
  .contains(2015, 6);

3.7 Satisfies Método auxiliar

O método Satisfies permite verificar rapidamente se um objeto atende a todas as asserções fornecidas.

Vamos criar um exemplo de instância String:

String givenString = "someString";

e agora podemos fornecer asserções como um corpo lambda:

assertThat(givenString)
  .satisfies(s -> {
    assertThat(s).isNotEmpty();
    assertThat(s).hasSize(10);
  });

3.8 Método auxiliar HasOnlyOneElementSatisfying

O método auxiliar HasOnlyOneElement permite verificar se uma instância Iterable contém exatamente apenas um elemento que satisfaz as asserções fornecidas.

Vamos criar um exemplo _List: _

List<String> givenList = Arrays.asList("");

e agora você pode afirmar:

assertThat(givenList)
  .hasOnlyOneElementSatisfying(s -> assertThat(s).isEmpty());

3.9 Método auxiliar Matches

O método auxiliar Matches permite verificar se um determinado objeto corresponde à função Predicate.

Vamos dar uma _String vazia: _

String emptyString = "";

e agora podemos verificar seu estado, fornecendo uma função Predicate lambda adequada:

assertThat(emptyString)
  .matches(String::isEmpty);

4. Conclusão

Neste último artigo da série AssertJ, exploramos todos os recursos avançados do AssertJ Java 8, que concluem a série.

A implementação de todos os exemplos e trechos de código pode ser encontrada no GitHub project.