SlideShare uma empresa Scribd logo
Continuous
LearningAve
Native
AppsAlley
Avenue Coders
Plaza
DevOps
Road
Microservices
Blvd
Cloud Platform
Blvd
Machine Learning
Ave
Data
Science
Plaza
Web Development
Hwy
Design
Alley
Digital
Transformation
Ave
Agile
Coaching
Ave
E-Commerce
Turnpike
Developers
Hwy
Testando uma aplicação
com Arquitetura
Hexagonal e Spring
Boot
Dezembro/2020
Henrique Schmidt
https://bit.ly/33fa4N0
henriquels25/fantasy-sport-api
https://bit.ly/2IYWvdV
Arquitetura
Hexagonal
Pirâmide de testes Testando a lógica
de negócio
Testando os
adaptadores
Testes end-to-end
Summary
1 4 52 3
Arquitetura
Hexagonal1
Ports & Adapters
@TotherAlistair
Documentado em 2005, por
Alistair Cockburn.
https://alistair.cockburn.us/hexagonal-architecture/
A V E
NUE
8
Objetivo #1
Arquitetura Hexagonal
Permitir que uma aplicação seja
igualmente guiada por usuários,
programas, testes automatizados ou
scripts.
1
A V E
NUE
9
Objetivo #2
Arquitetura Hexagonal
Permitir que uma aplicação seja desenvolvida
de forma isolada dos banco de dados e
dispositivos necessários na hora da execução.
1
A V E
NUE
10
Arquitetura Hexagonal1
https://alistair.cockburn.us/hexagonal-architecture
A V E
NUE
11
Arquitetura Hexagonal1
Classes
Interfaces
Dependência
Implementação
Classes com lógica
de negócio
A V E
NUE
13
Arquitetura Hexagonal1
Classes
Interfaces
Dependência
Implementação
Classes com lógica
de negócio
A V E
NUE
14
Arquitetura Hexagonal1
Classes
Interfaces
Dependência
Implementação
Classes com lógica
de negócio
A V E
NUE
15
Arquitetura Hexagonal1
Classes
Interfaces
Dependência
Implementação
Classes com lógica
de negócio
A V E
NUE
16
Arquitetura Hexagonal1
Classes
Interfaces
Dependência
Implementação
Classes com lógica
de negócio
Pirâmide de
testes2
A V E
NUE
18
Pirâmide de testes2
@mikewcohn
A V E
NUE
19
Pirâmide de testes2
https://martinfowler.com/articles/practical-test-pyramid.html
A V E
NUE
20
Pirâmide de testes2
Unitários
Integração
E2E
Camada de negócio
Adaptadores
Integração entre
adaptadores e negócio
Testando a
lógica de
negócio3
https://github.com/henriquels25/fantasy-sport-api
Classes
Interfaces
Dependência
Implementação
A V E
NUE
23
Testando a lógica de negócio3
Unitários
Integração
E2E
A V E
NUE
24
Testando a lógica de negócio3
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
A V E
NUE
25
Como não há infra-estrutura
complexa envolvida,
precisamos apenas de uma
biblioteca de testes
Testando a lógica de negócio3
Testando uma aplicação com Arquitetura Hexagonal e Spring Boot
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerFacadeTest.java
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerFacadeTest.java
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerFacadeTest.java
Testando os
adaptadores4
A V E
NUE
31
Testando os adaptadores4
Unitários
Integração
E2E
A V E
NUE
32
O propósito do
Spring Boot é tornar
fácil a criação de
aplicações Spring.
Testando os adaptadores4
https://spring.io/blog/2013/08/06/spring-boot-simplifying-spring-for-everyone/
A V E
NUE
33
4
● Banco de dados relacional;
● MongoDB;
● Kafka;
● Chamada para API externa.
Testando os adaptadores
Provê a infraestrutura para diversos tipos de
teste, entre eles:
A V E
NUE
34
Objetivo é garantir que
nosso código integra de
forma correta com o mundo
externo
Testando os adaptadores4
Não crie mocks para tipos
que você não é o dono
How to write good tests - Documentação do mockito
https://github.com/mockito/mockito/wiki/How-to-write-good-tests
Testando o
Controller
A V E
NUE
37
Testando os adaptadores4
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
A V E
NUE
39
Contexto Spring
Testando os adaptadores
O Spring Boot fornece diversas anotações para levantar
apenas uma parte de uma aplicação.
4
A V E
NUE
40
Testando os adaptadores4
@WebMvcTest
@WebFluxTest
A V E
NUE
41
Testando os adaptadores4
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/controller/PlayerControllerTest.java
A V E
NUE
42
Testando os adaptadores4
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/controller/PlayerControllerTest.java
A V E
NUE
43
Testando os adaptadores4
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/controller/PlayerControllerTest.java
MongoDB
A V E
NUE
45
Testando os adaptadores4
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
A V E
NUE
46
4
@DataMongoTest
1. A aplicação se conectará a um banco de dados MongoDB embarcado, por
padrão.
2. Todos documentos e repositórios estarão disponíveis para teste.
Testando os adaptadores
A V E
NUE
47
4 Testando os adaptadores
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/mongo/MongoPlayerRepositoryTest.java
A V E
NUE
48
4 Testando os adaptadores
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/mongo/MongoPlayerRepositoryTest.java
API Externa
A V E
NUE
50
Testando os adaptadores4
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
A V E
NUE
51
4
@AutoConfigureWireMock
1. Esta anotação subirá um servidor WireMock onde a aplicação fará
chamadas como se fosse um servidor real.
Testando os adaptadores
A V E
NUE
52
4 Testando os adaptadores
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/client/RestTeamRepositoryTest.java
A V E
NUE
53
4 Testando os adaptadores
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/client/RestTeamRepositoryTest.java
Kafka
A V E
NUE
55
Testando os adaptadores4
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
A V E
NUE
57
4
@EmbeddedKafka
1. Esta anotação fornece um servidor Kafka em memória para ser usado nos
testes de integração
Testando os adaptadores
A V E
NUE
58
4 Testando os adaptadores
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/kafka/KafkaPlayerNotificationTest.java
A V E
NUE
59
4 Testando os adaptadores
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/infra/kafka/KafkaPlayerNotificationTest.java
Testes
end-to-end5
A V E
NUE
61
5 Testes end-to-end
Unitários
Integração
E2E
A V E
NUE
62
5 Testes end-to-end
Dependência
Implementação
Classe sobre teste
A V E
NUE
63
5
@SpringBootTest
1. Essa anotação permite fazer um teste levantando todo o contexto de uma
aplicação Spring Boot.
2. Com isso, é possível validar que a implementação dos adaptadores
funcionam corretamente quando integrados com a camada de negócio.
Testes end-to-end
A V E
NUE
64
5 Testes end-to-end
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerAcceptanceTest.java
A V E
NUE
65
5 Testes end-to-end
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerAcceptanceTest.java
A V E
NUE
66
5 Testes end-to-end
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerAcceptanceTest.java
A V E
NUE
67
5 Testes end-to-end
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerAcceptanceTest.java
A V E
NUE
68
5 Testes end-to-end
https://github.com/henriquels25/fantasy-sport-api/blob/main/src/test/java/io/henriquels25/fanta
sysport/player/PlayerAcceptanceTest.java
Thank you!
Questions?
Henrique Schmidt
henriquels25@gmail.com
https://bit.ly/2IYWvdV

Mais conteúdo relacionado

Mais procurados (20)

PPTX
The Power of Azure DevOps
Jeff Bramwell
 
PPTX
Feature toggles
Anand Agrawal
 
PDF
Terraform
Christophe Marchal
 
PPTX
An introduction to DevOps
Alexander Meijers
 
PPTX
Cypress report
Adarsh
 
PDF
Terraform 0.12 Deep Dive: HCL 2.0 for Infrastructure as Code, Remote Plan & A...
Mitchell Pronschinske
 
PDF
Terraform -- Infrastructure as Code
Martin Schütte
 
PDF
Terraform
Diego Pacheco
 
PDF
Cypress - Best Practices
Brian Mann
 
PDF
Cypress testing
Vladyslav Romanchenko
 
PDF
Helm - Application deployment management for Kubernetes
Alexei Ledenev
 
PPTX
Spring cloud config
Shubhani Jain
 
PDF
Microservices, Containers and Docker
Ioannis Papapanagiotou
 
PPTX
Final terraform
Gourav Varma
 
PDF
Modern Tools for API Testing, Debugging and Monitoring
Neil Mansilla
 
PDF
SRE From Scratch
Grier Johnson
 
PDF
Kubernetes Application Deployment with Helm - A beginner Guide!
Krishna-Kumar
 
PDF
Quarkus tips, tricks, and techniques
Red Hat Developers
 
PPTX
Terraform Basics
Mohammed Fazuluddin
 
PPT
Présentation Maven
SOAT
 
The Power of Azure DevOps
Jeff Bramwell
 
Feature toggles
Anand Agrawal
 
An introduction to DevOps
Alexander Meijers
 
Cypress report
Adarsh
 
Terraform 0.12 Deep Dive: HCL 2.0 for Infrastructure as Code, Remote Plan & A...
Mitchell Pronschinske
 
Terraform -- Infrastructure as Code
Martin Schütte
 
Terraform
Diego Pacheco
 
Cypress - Best Practices
Brian Mann
 
Cypress testing
Vladyslav Romanchenko
 
Helm - Application deployment management for Kubernetes
Alexei Ledenev
 
Spring cloud config
Shubhani Jain
 
Microservices, Containers and Docker
Ioannis Papapanagiotou
 
Final terraform
Gourav Varma
 
Modern Tools for API Testing, Debugging and Monitoring
Neil Mansilla
 
SRE From Scratch
Grier Johnson
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Krishna-Kumar
 
Quarkus tips, tricks, and techniques
Red Hat Developers
 
Terraform Basics
Mohammed Fazuluddin
 
Présentation Maven
SOAT
 

Testando uma aplicação com Arquitetura Hexagonal e Spring Boot