Slide 1

Slide 1 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 1

Slide 2

Slide 2 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 2 Construa testes efetivos através do princípio F.I.R.S.T Elder Moraes | @elderjava Developer Advocate Novembro, 2019

Slide 3

Slide 3 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation.

Slide 4

Slide 4 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 4

Slide 5

Slide 5 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 5 F I R S T AST NDEPENDENT EPEATABLE ELF-VALIDATING IMELY

Slide 6

Slide 6 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Se os testes forem lentos, você não vai querer executá-los com frequência • Se você não os executa com frequência, não encontrará problemas cedo o suficiente para corrigí-los facilmente 6 F AST

Slide 7

Slide 7 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | O que pode fazer um teste ser lento 7 F AST Execução manual Validação manual A própria execução do teste

Slide 8

Slide 8 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Eliminando a execução manual – Frameworks: JUnit, Arquillian, Selenium, Mockito, Wiremock – Automações: Maven, Gradle, Jenkins, Vagrant, Ansible, Docker Compose – Monitoramento: Grafana, Prometheus, Jaeger 8 F AST

Slide 9

Slide 9 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Eliminando a validação manual – Vide SELF-VALIDATING 9 F AST

Slide 10

Slide 10 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Eliminando lentidão no próprio teste – Identificação dos pontos de lentidão (banco de dados, integração, rede, etc) – Refatoração de código – Mocking 10 F AST

Slide 11

Slide 11 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Um teste não deve depender do outro • Um teste não deve criar as condições para o próximo teste • Você deve ser capaz de executar cada teste individualmente e executar todos os testes em qualquer ordem • Quando os testes dependem uns dos outros, o primeiro a falhar causa uma reação em cadeia, dificultando o diagnóstico e escondendo defeitos que possam estar adiante 11 I NDEPENDENT

Slide 12

Slide 12 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Como eliminar dependência entre testes – Alta coesão – DRY (Don’t Repeat Yourself) 12 I NDEPENDENT “We want to design components that are self-contained: independent, and with a single, well-defined purpose” - The Pragmatic Programmer

Slide 13

Slide 13 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Como eliminar dependência entre testes – Baixo acoplamento 13 I NDEPENDENT VS

Slide 14

Slide 14 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 14

Slide 15

Slide 15 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Testes deve ser reproduzíveis em qualquer ambiente • Produção, QA, laptop (mesmo sem rede) • Do contrário, você sempre terá uma desculpa para não executá-los – Além disso, não conseguirá executá-los quando o ambiente não estiver disponível 15 R EPEATABLE

Slide 16

Slide 16 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Eliminando a dependência de ambientes 16 R EPEATABLE Banco de Dados Sistema Operacional Deploy e Execução

Slide 17

Slide 17 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Eliminando a dependência de ambientes 17 R EPEATABLE

Slide 18

Slide 18 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | Vagrantfile 18

Slide 19

Slide 19 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Testes devem ser auto-explicativos: passou/falhou • O teste não deve exigir que *você*: – Leia um log – Compare dois arquivos – Veja uma tela – Etc… • Se não forem auto-explicativos, então a falha pode ser subjetiva • Leva à demora na validação (e falha no princípio FAST) 19 S ELF-VALIDATING

Slide 20

Slide 20 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 20

Slide 21

Slide 21 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 21

Slide 22

Slide 22 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • Testes devem ser escritos o quanto antes • Se você espera um código entrar em produção para escrever o teste, pode acabar descobrindo que é difícil testá-lo • Ao fazer isso continuamente, logo você terá todo seu código de produção impossível de ser testado 22 T IMELY

Slide 23

Slide 23 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | “Tests are as important… as the production code is. Perhaps they are even more important, because tests preserve and enhance the flexibility, maintainability, and reusability of the production code.” – Rober C. Martin, “Clean Code” Confidential – Oracle Internal/Restricted/Highly Restricted 23

Slide 24

Slide 24 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | @elderjava book.eldermoraes.com

Slide 25

Slide 25 text

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 26