Reactor + Junit : Escrevendo
testes unitários com Spring
Webflux
Kamila Santos
Slide 2
Slide 2 text
@kamila_code
Quem sou eu
KAMILA SANTOS
Dev Backend @Ame Digital
Microsoft MVP em Developer Technologies
Community organizer
Creator no experts club da @rocketseat
Content Creator no instagram @kamila_code
e no youtube Kamila code
Slide 3
Slide 3 text
@Kamila_code
Agenda
PIRÂMIDE DE TESTE
TESTES UNITÁRIOS
WEBFLUX
REACTOR
Slide 4
Slide 4 text
Agenda
PRINICIPIOS FIRST
TEST SMELLS
COBERTURA DE TESTES
TESTABILIDADE
@Kamila_code
Slide 5
Slide 5 text
Agenda
MOCK
EXEMPLO
@Kamila_code
Slide 6
Slide 6 text
@kamila_code
Pirâmide de testes
TESTE DE UNIDADE
TESTE DE INTEGRAÇÃO
TESTE
DE SISTEMA
MAIOR GRANULARIDADE
MENOR QUANTIDADE
MAIS LENTOS
MAIOR CUSTO
MENOR GRANULARIDADE
MAIOR QUANTIDADE
MAIS RÁPIDOS
MENOR CUSTO
Slide 7
Slide 7 text
@kamila_code
Teste de unidade
VERIFICAM PEQUENAS UNIDADES
FUNCIONAIS DA SUA APLICAÇÃO, FAZENDO
OS TESTES DE MODO INDIVIDUAL É MAIS
FÁCIL ENCONTRAR ERROS, SÃO MAIS
SIMPLES DE IMPLEMENTAR.
Slide 8
Slide 8 text
@kamila_code
Testes de integração
VERIFICAM UMA FUNCIONALIDADE (UMA
TRANSAÇÃO COMPLETA, UM FLUXO) DO
SISTEMA, EXIGEM MAIS ESFORÇO PARA
SEREM IMPLEMENTADOS E SUA EXEUÇÃO É
MAIS LENTA.
Slide 9
Slide 9 text
@kamila_code
Teste de sistema
SIMULAM DA FORMA MAIS REALISTA
POSSÍVEL, COMO SERIA A INTERAÇÃO DO
USUÁRIO FINAL COM A APLICAÇÃO, SÃO
MAIS CAROS/CUSTOSOS, MAIS LENTOS E
MAIS FRÁGEIS (SE MUDAR UM BOTÃO PODE
QUEBRAR)
Slide 10
Slide 10 text
@kamila_code
Testes unitários
Slide 11
Slide 11 text
@kamila_code
Testes unitários
SÃO RESPONSÁVEIS POR CHAMAR
MÉTODOS DE UMA CLASSE PARA
EXECUTAR UMA DETERMINADA FUNÇÃO.
(PODENDO COBRIR CASO DE SUCESSO E
CASO DE ERRO)
Slide 12
Slide 12 text
@kamila_code
Testes unitários
GERALMENTE SÃO IMPLEMENTADOS
UTILIZANDO UM FRAMEWORK DE TESTE,
GRANDE PARTE DELES POSSUINDO O
NOME XUNIT (X-> LINGUAGEM A SER
TESTADA), POR EXEMPLO NO JAVA, O MAIS
FAMOSO É O JUNIT.
Slide 13
Slide 13 text
Algumas convenções
-> CLASSES DE TESTE DEVEM POSSUIR O
SUFIXO +TEST
-> MÉTODOS DE TESTES DEVEM SER
PUBLICOS
-> NÃO DEVEM RECEBER PARÂMETROS
> DEVEM POSSUIR A ANOTAÇÃO @TEST
@kamila_code
Slide 14
Slide 14 text
@kamila_code
Algumas convenções
Slide 15
Slide 15 text
@kamila_code
Estrutura básica
Slide 16
Slide 16 text
@kamila_code
Estrutura básica
Slide 17
Slide 17 text
@kamila_code
Estrutura básica
Slide 18
Slide 18 text
@kamila_code
Webflux
TRABALHO HÁ QUASE 2 ANOS COM ESSA TECNOLOGIA, É A
VERSÃO REATIVA, ASSÍNCRONA E NÃO BLOQUEANTE DO FAMOSO
E MUITO UTILIZADO SPRING MVC.
EM VEZ DE UTILIZAR O TOMCAT COMO SERVIDOR PADRÃO
UTILIZA O NETTY
PALESTRA EM QUE FALEI MAIS SOBRE ESSA PARTE TEÓRICA DO WBEFLUX: HTTPS://SPEAKERDECK.COM/KAMILAHSANTOS/THEDEVCONF-
2020-PARADIGMA-REATIVO-POR-DENTRO-DA-PROGRAMACAO-REATIVA-COM-SPRING-WEBFLUX-E-PROJETO-REACTOR-TRILHA-DESIGN-DE-
CODIGO-E-XP
Slide 19
Slide 19 text
@kamila_code
Reactor
BIBLIOTECA MAIS UTILIZADA QUANDO TRABALHAMOS COM
SPRING WEBFLUX , IMPLEMENTA AS REACTIVE STREAMS, E USA O
CONCEITO DE FLUX E MONO:
FLUX: TRABALHA COM FLUXOS DE 0 A N (VÁRIOS)
MONO: TRABALHA COM FLUXOS DE 0 A 1
PALESTRA EM QUE FALEI MAIS SOBRE ESSA PARTE TEÓRICA : HTTPS://SPEAKERDECK.COM/KAMILAHSANTOS/THEDEVCONF-2020-
PARADIGMA-REATIVO-POR-DENTRO-DA-PROGRAMACAO-REATIVA-COM-SPRING-WEBFLUX-E-PROJETO-REACTOR-TRILHA-DESIGN-DE-
CODIGO-E-XP
Slide 20
Slide 20 text
@kamila_code
Princípios FIRST
F: FAST (RÁPIDOS)
I:INDEPENDENT (INDEPENDENTES)
R: REPEATABLE (DETERMINÍSTICOS
S: SELF-CHECKING (AUTO-VERIFICÁVEIS)
T: TIMELY (ESCRITOS O QUANTO ANTES)
Slide 21
Slide 21 text
@kamila_code
F - FAST - RÁPIDOS
DEVEM SER EXECUTADOS RÁPIDAMENTE (SEGUNDOS OU
MILISEGUNDOS) FORNECENDO UM FEEDBACK CLARO E RÁPIDO
DAQUELE TESTE.
Slide 22
Slide 22 text
@kamila_code
i - INDEPENDENT - INDEPENDENTES
A EXECUÇÃO DE UM TESTE NÃO DEVE INTERFERIR NA EXECUÃO
DE OUTRO.
A ORDEM QUE OS TESTES FOR EXECUTADA NÃO DEVE MUDAR
SEU RESULTADO
Slide 23
Slide 23 text
@kamila_code
R - REPEATABLE -
DETERMINÍSTICOS
UM TESTE QUE COBRE UM CASO DE SUCESSO DEVE SEMPRE
RESULTAR EM SUCESSO, BEM COMO ALGUM QUE CUBRA CASO DE
ERRO SEMPRE DEVE RESULTAR EM ALGUMA EXCEPTION
O RESULTADO NÃO PODE SER ALGO QUE VARIA A CADA
EXECUÇÃO, CASO ISSO OCORRA PROVAVEL QUE EXISTA UM BUG
Slide 24
Slide 24 text
@kamila_code
S - Self-checking (Auto-verificáveis)
O RESULTADO DE UM TESTE DEVE SERM FACILMENTE
COMPREENDIDO , GRANDE PARTE DAS IDES ADOTAM A
CONVENÇÃO DE:
VERDE: TESTE PASSOU
VERMELHO: TESTE FALHOU
EM CASO DE FALHA É BOM QUE O TESTE POSSUA UMA
ESTRUTURA QUE FACILITE A COMPREENSÃO DE QUAL
ASSERT/EXPECT/VERIFY QUE DEU ERRADO.
Slide 25
Slide 25 text
@kamila_code
TEST SMELLS
Slide 26
Slide 26 text
@kamila_code
Teste obscuro
TESTE COMPLEXO, LONGO E DIFICIL DE ENTENDER.
Slide 27
Slide 27 text
@kamila_code
Cobertura de teste
MÉTRICA QUE AJUDA A DEFINIR O NÚMERO DE TESTES QUE
PRECISAMOS ESCREVER PARA UMA APLICAÇÃO.
MEDE O PERCENTUAL DE "AÇÕES" QUE SÃO COBERTAS POR
TESTES.
Slide 28
Slide 28 text
@kamila_code
Testabilidade
MEDIDA DE QUÃO DIFÍCIL É IMPLEMENTAR TESTES PARA UMA
APLICAÇÃO.
-> SEGUE OS PRINCIPIOS FIRST
-> TENHAM POUCOS ASSERTS (MAIS DE UMA VERIFICAÇÃO NO
MESMO TESTE)
Slide 29
Slide 29 text
@kamila_code
Mocks
SIMULAM UM OBJETO REAL PARA SER UTILIZADO DURANTE O
TESTE, TENDO OS MESMOS ATRIBUTOS E USANDO VALORES QUE
SERIAM PASSADOS EM SITUAÇÕES REAIS.
EXISTEM DIVERSOS FRAMEWORKS PARA CRIAÇÃO DE MOCKS, O
MAIS UTILIZADO NO JAVA É O MOCKITO.
Slide 30
Slide 30 text
@kamila_code
Hora da demo:
Slide 31
Slide 31 text
@kamila_code
Referências e onde saber mais sobre o
tema:
Cap 8 testes - https://engsoftmoderna.info/cap8.html
Effective Unit Testing - https://www.youtube.com/watch?v=fr1E9aVnBxw
Write awesome tests - https://www.youtube.com/watch?v=F8Gc8Nwf0yk
Software Testing Tutorial
- https://www.youtube.com/watch?v=Geq60OVyBPg
webflux essentials - devdojo - https://www.youtube.com/results?
search_query=devdojo+webflux
Google Testing blog - https://testing.googleblog.com/
Testing guide marting fowler - https://martinfowler.com/testing/