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.