Globalcode – Open4education
Java - Construindo uma arquitetura de testes
Sandro L Giacomozzi
@sandrogiacom
Alisson Medeiros
@AlissonMedeiros
Globalcode – Open4education
Por que?
Preguiça
Repetição
Inovação
Meuémelhor
Novidade
Automação
Necessidade
TCC
Produtividade
Reduzircustos
Nãoexiste
hobby
Globalcode – Open4education
Globalcode – Open4education
● Novo modelo de desenvolvimento e entrega de serviços
● Pouca ou nenhuma cultura de testes
● Cada equipe possui um padrão e ferramentas distintas
● Demora no feedback dos testes. Testes quebrados
● Confusão sobre teste de unidade e teste de integração
● Criar uma cultura colaborativa
Nossa motivação
Globalcode – Open4education
Não tínhamos segurança para entregar
software no modelo proposto com qualidade e
velocidade esperada!
Resumindo...
Globalcode – Open4education
● Conjunto de boas práticas
○ Nomenclatura, estrutura de código
● Ferramentas e frameworks
○ JUnit, Mockito, AssertJ, Rest-assured, Testcontainers,
Jacoco, PIT
● Documentação
○ Conceitos, como utilizar e exemplos
O que é - proposta
Globalcode – Open4education
Primeira rodada
Levante as
necessidades e
dificuldades da equipe
Faça uma
implementação inicial
(POC)
Valide com um
projeto em
desenvolvimento
Compartilhe os
resultados e prepare
novas funcionalidades
Globalcode – Open4education
X de testes
Globalcode – Open4education
Exemplo
Padrão para testes de
unidade e integração.
Criação do projeto com
dependências Maven,
exemplos e
documentação.
Primeiros projetos
utilizando o novo
padrão
Compartilhamento do
aprendizado e
preparação para novas
funcionalidades.
Globalcode – Open4education
Exemplo - Teste de Unidade
JUnit + AssertJ
JUnit + AssertJ + Mockito
Globalcode – Open4education
Exemplo - Teste de Integração
Spring Boot Test +
RestAssured
Globalcode – Open4education
Exemplo - Teste de Integração com Mock
Spring Boot Test +
RestAssured + MockServer
Globalcode – Open4education
Before run tests
https://www.testcontainers.org/
Globalcode – Open4education
● Centraliza outras bibliotecas (starter)
● Faz a gestão das versões de terceiros
● Facilita o setup de um novo serviço
● Encapsula a infraestrutura
O que faz a biblioteca
E?
Globalcode – Open4education
Vamos checar?
Globalcode – Open4education
O que a checagem resolve?
• Problema: É o que importa e pode estar escondido, separar da
solução. Ex.: Vamos escrever testes poder fazer liberações em
produção a qualquer momento. Problema real: Não é possível
liberar código em produção a qualquer momento.
Globalcode – Open4education
Antes de começar a checar
• Comunicação: Todos devem entender a importância do problema
e a solução Ex.: dois desenvolvedores sabem que a maioria das
liberações em produção afetam os clientes, mas o restante do time
desconhece. Comunicação + problema: alinhamento
Globalcode – Open4education
O que checar?
• Meta/Medida: Checagem deve ser o mais simples possível, Ex.:
Testes escritos na semana, valor + meta = resultado.
Globalcode – Open4education
Vigilância
• Monitoramento/Feedback: Ex.: acordei em fazer testes para
liberar código em produção livre de bugs, como saber se é estou
sem checagem? Posso liberar uma versão agora?
Globalcode – Open4education
● Cobertura de código:
Checagem quantitativa
Globalcode – Open4education
● JaCoCo, baixou? O build quebra....
Como garantir minha evolução?
Globalcode – Open4education
Qual código está melhor testado?
Estou evoluindo, mas com bons
testes?
Cobertura pode ser uma cilada bino.
Globalcode – Open4education
● Plugin de mutação, garantindo a qualidade!
Mutação vs cobertura
Globalcode – Open4education
Testes rasos = mutação baixa
Globalcode – Open4education
Testes com profundidade =
mutação alta
Globalcode – Open4education
● Ferramentas como:
○ Code Climate
○ Sonar
○ Codacy
Que tal colocar uma dessas ferramentas nos seus Pull Request?
Como dar visibilidade e
transparência?
Globalcode – Open4education
● Sonar Cloud - Demo
Show me the code
Globalcode – Open4education
Conheça a comunidade de desenvolvedores da
TOTVS
developers.totvs.com
Globalcode – Open4education
https://github.com/sandrogiacom/jtest-tools
https://github.com/sandrogiacom/testcontainers-demo
https://github.com/AlissonMedeiros/jacoco-demo
https://github.com/AlissonMedeiros/mutation-example
Obrigado!

TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes