Slide 1

Slide 1 text

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/

Slide 32

Slide 32 text

@kamila_code Obrigada :) https://beacons.page/kamila_code https://github.com/Kamilahsantos/qaladies-2021-unit-test- webflux-reactor-junit