Autores:
Claudenir Freitas (claudenir.machado@sensedia.com)
Jhonas Mutton (jhonas.mutton@sensedia.com)
Data: 11/09/2019
Testes de integração em
Microservices
1
● INTRODUÇÃO
● TESTES UNITÁRIOS
● MOCK, EMBEDDED, COMO TESTAR?
● TESTES DE INTEGRAÇÃO
● DEMO
AGENDA
● BÔNUS: GRAAL VM
CLAUDENIR JHONAS
Introdução
1INTRODUÇÃO
Por que testamos nossas aplicações?
1INTRODUÇÃO
1INTRODUÇÃO
1NÃO PERCA O CONTROLE
1INTRODUÇÃO
1INTRODUÇÃO
Database
1INTRODUÇÃO
Database
1INTRODUÇÃO
Database
1INTRODUÇÃO
Database
1INTRODUÇÃO
Database
1INTRODUÇÃO
Database
“Show me the code!
“Show me the code!
numbers!
1INTRODUÇÃO
Ecossistema do dev: https://www.jetbrains.com/lp/devecosystem-2019/
Testes unitários
1CLASSE DE SERVIÇO: COMO TESTAR?
1TESTE UNITÁRIO BÁSICO
1OK, MAS E AGORA?
1MOCK REPOSITORY
1DATABASE EMBEDDED
Testes de integração
1INTRODUÇÃO
Mas por que fazer testes de integração?
Resource
layer
Service
layer
1INTRODUÇÃO
1TESTES DE INTEGRAÇÃO
● testes unitários garantem apenas as unidades isoladamente
1TESTES DE INTEGRAÇÃO
● testes unitários garantem apenas as unidades isoladamente
● muitos erros podem ocorrer ao interagir com outras partes/sistemas
1TESTES DE INTEGRAÇÃO
● testes unitários garantem apenas as unidades isoladamente
● muitos erros podem ocorrer ao interagir com outras partes/sistemas
● mockar pode não refletir a realidade
1TESTES DE INTEGRAÇÃO
● testes unitários garantem apenas as unidades isoladamente
● muitos erros podem ocorrer ao interagir com outras partes/sistemas
● mockar pode não refletir a realidade
● validar a integração apenas em produção pode custar caro
1TESTES DE INTEGRAÇÃO
Como fazer?
1COMO ENTREGAMOS EM PRODUÇÃO?
1COMO ENTREGAMOS EM PRODUÇÃO?
1COMO ENTREGAMOS EM PRODUÇÃO?
Database
1COMO ENTREGAMOS EM PRODUÇÃO?
Database
1COMO ENTREGAMOS EM PRODUÇÃO?
Database
1TESTES DE INTEGRAÇÃO
Database
1TESTES DE INTEGRAÇÃO
Database
1TESTES DE INTEGRAÇÃO
Database
1TESTES DE INTEGRAÇÃO
Por que fazer?
1TESTES DE INTEGRAÇÃO
1TESTES DE INTEGRAÇÃO
1TESTCONTAINERS
● biblioteca Java para utilizar containers no contexto de aplicação
1TESTCONTAINERS
● biblioteca Java para utilizar containers no contexto de aplicação
● casos de uso:
1TESTCONTAINERS
● biblioteca Java para utilizar containers no contexto de aplicação
● casos de uso:
○ Data access layer integration tests
1TESTCONTAINERS
● biblioteca Java para utilizar containers no contexto de aplicação
● casos de uso:
○ Data access layer integration tests
○ Application integration tests
1TESTCONTAINERS
● biblioteca Java para utilizar containers no contexto de aplicação
● casos de uso:
○ Data access layer integration tests
○ Application integration tests
○ Acceptance tests
1TESTCONTAINERS
● biblioteca Java para utilizar containers no contexto de aplicação
● casos de uso:
○ Data access layer integration tests
○ Application integration tests
○ Acceptance tests
e muito mais!
1TESTCONTAINERS - ARQUITETURA
1TESTCONTAINERS - ARQUITETURA
1TESTCONTAINERS - ARQUITETURA
1TESTCONTAINERS - ARQUITETURA
1TESTCONTAINERS - ARQUITETURA
1TESTCONTAINERS - ARQUITETURA
1TESTCONTAINERS - ARQUITETURA
1LINGUAGENS SUPORTADAS
1MÓDULOS
1MÓDULOS
1MÓDULOS
1It’s demo time!
Conclusão
1TestContainers: Alguns prós e contras
● simplista
● extensível
● projeto open source
● projeto ativo
● estratégia container up
● sintaxe para rodar o initScript
● linguagens suportadas
Reflexão
1Reflexão
GraalVM
1GraalVM: Alguns prós e contras
Compila em linguagem de máquina o/
● Sobe rápido
● Não precisa da JVM
● Usa pouco recurso
● Não suporta Hikari
● Não suporta banco de dados embedded (h2)
● Artefato final grande (80 MB vs 800 KB)
● Compilação demora e exige muita memória
● Não suporta ehCache
● Problemas com reflection
● Não compila com MySQL (Quarkus 0.19.1)
...
Muito
agradecido!
1CONTEÚDOS INTERESSANTES
Testcontainers
https://www.testcontainers.org/
Quarkus: Supersonic Subatomic Java
https://quarkus.io/
GraalVM
https://www.graalvm.org/
Github do projeto (sugestões são welcome!)
https://github.com/ClaudenirFreitas/quarkus-microservice-test
CLAUDENIR JHONAS
@claudenir_cf @jhonas633
CLAUDENIR JHONAS
@claudenir_cf @jhonas633

Testes de integração em microservices