Arquitetura hexagonal é um padrão de projeto que tem como objetivo criar aplicações com baixo acoplamento, possuindo componentes que podem ser facilmente substituídos quando necessário.
Como testar a lógica de negócio? E os adaptadores? Como garantir que a integração entre os componentes funciona?
Esta palestra tem como objetivo mostrar na prática, usando Spring Boot, como testar uma aplicação que utiliza a arquitetura hexagonal.
8. 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
9. 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
31. 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/
32. 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:
33. A V E
NUE
34
Objetivo é garantir que
nosso código integra de
forma correta com o mundo
externo
Testando os adaptadores4
34. 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
39. 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
40. 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
41. 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
43. A V E
NUE
45
Testando os adaptadores4
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
44. 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
45. 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
46. 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
48. A V E
NUE
50
Testando os adaptadores4
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
49. 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
50. 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
51. 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
53. A V E
NUE
55
Testando os adaptadores4
Classes
Interfaces
Dependência
Implementação
Classe sobre teste
54. 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
55. 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
56. 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
58. A V E
NUE
61
5 Testes end-to-end
Unitários
Integração
E2E
59. A V E
NUE
62
5 Testes end-to-end
Dependência
Implementação
Classe sobre teste
60. 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
61. 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
62. 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
63. 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
64. 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
65. 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