AssertJ for Guava

AssertJ for Guava

*1. Visão geral *

Este artigo foca em AssertJ asserções relacionadas à goiaba e é o segundo artigo da série AssertJ. Se você quiser obter algumas informações gerais sobre o AssertJ, consulte o primeiro artigo do link da série:/Introduction-to-assertj [Introdução ao AssertJ].

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

Para usar o AssertJ com o Guava, você precisa adicionar a seguinte dependência ao seu pom.xml:

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-guava</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
</dependency>

Você pode encontrar a versão mais recente aqui.

E observe que, desde a versão 3.0.0, o AssertJ Guava conta com o Java 8 e o AssertJ Core 3.x.

===* 3. Declarações de goiaba em ação *

AssertJ possui asserções personalizadas para os tipos do Guava: ByteSource, Multimap, Optional, Range, RangeMap e Table.

====* 3.1 ByteSource asserções *

Vamos começar criando dois arquivos temporários vazios:

File temp1 = File.createTempFile("bael", "dung1");
File temp2 = File.createTempFile("bael", "dung2");

e criando instâncias ByteSource a partir delas:

ByteSource byteSource1 = Files.asByteSource(temp1);
ByteSource byteSource2 = Files.asByteSource(temp2);

Agora podemos escrever a seguinte asserção:

assertThat(buteSource1)
  .hasSize(0)
  .hasSameContentAs(byteSource2);

====* 3.2 Multimap * Asserções

Multimaps são mapas que podem associar mais de um valor a uma determinada chave. As asserções Multimap funcionam de maneira semelhante às implementações normais Map.

Vamos começar criando uma instância Multimap e adicionando algumas entradas:

Multimap<Integer, String> mmap = Multimaps
  .newMultimap(new HashMap<>(), Sets::newHashSet);
mmap.put(1, "one");
mmap.put(1, "1");

E agora podemos afirmar:

assertThat(mmap)
  .hasSize(2)
  .containsKeys(1)
  .contains(entry(1, "one"))
  .contains(entry(1, "1"));

Há também duas afirmações adicionais disponíveis - com sutil diferença entre elas:

  • containsAllEntriesOf e *hasSameEntriesAs.

Vamos dar uma olhada nessas duas afirmações; começaremos definindo alguns mapas:

Multimap<Integer, String> mmap1 = ArrayListMultimap.create();
mmap1.put(1, "one");
mmap1.put(1, "1");
mmap1.put(2, "two");
mmap1.put(2, "2");

Multimap<Integer, String> mmap1_clone = Multimaps
  .newSetMultimap(new HashMap<>(), HashSet::new);
mmap1_clone.put(1, "one");
mmap1_clone.put(1, "1");
mmap1_clone.put(2, "two");
mmap1_clone.put(2, "2");

Multimap<Integer, String> mmap2 = Multimaps
  .newSetMultimap(new HashMap<>(), HashSet::new);
mmap2.put(1, "one");
mmap2.put(1, "1");

Como você pode ver, mmap1 e mmap1_clone contêm exatamente as mesmas entradas, mas são dois objetos diferentes de dois tipos diferentes de Map. O Map mmap2 contém uma única entrada que é compartilhada entre todos os mapas. Agora, a seguinte asserção é verdadeira:

assertThat(mmap1)
  .containsAllEntriesOf(mmap2)
  .containsAllEntriesOf(mmap1_clone)
  .hasSameEntriesAs(mmap1_clone);

====* 3.3 Optional * Declarações

As asserções para Optional do Guava envolvem verificação de presença de valor e utilitários para extrair o valor interno.

Vamos começar criando uma instância Optional:

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

E agora podemos verificar a presença do valor e afirmar o conteúdo de _Optional_s:

assertThat(something)
  .isPresent()
  .extractingValue()
  .isEqualTo("something");

3.4 Range Asserções

As asserções para a classe Range do Guava envolvem a verificação dos limites inferior e superior de Range ou se um determinado valor está dentro de um determinado intervalo.

Vamos definir um intervalo simples de caracteres, fazendo o seguinte:

Range<String> range = Range.openClosed("a", "g");

e agora podemos testar:

assertThat(range)
  .hasOpenedLowerBound()
  .isNotEmpty()
  .hasClosedUpperBound()
  .contains("b");

3.5 Tabela Asserções

As asserções específicas da tabela do AssertJ permitem a verificação da contagem de linhas e colunas e a presença de um valor de células.

Vamos criar uma instância Table simples:

Table<Integer, String, String> table = HashBasedTable.create(2, 2);
table.put(1, "A", "PRESENT");
table.put(1, "B", "ABSENT");

e agora podemos executar a seguinte verificação:

assertThat(table)
  .hasRowCount(1)
  .containsValues("ABSENT")
  .containsCell(1, "B", "ABSENT");

4. Conclusão

Neste artigo da série AssertJ, exploramos todos os recursos relacionados ao Goiaba.

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