Pensando em Java
Turbinando seus testes
Turbinar os testes?
Mas eu sou desenvolvedor,
não faço testes!!!
Testes são de
responsabilidade da equipe
de qualidade.
O que podemos fazer como desenvolvedores ?
Testes de Unidade
Verifica uma unidade (a menor parte do software) para garantir que tem o comportamento esperado. Neste tipo
de teste, a unidade é testada de forma isolada, sem considerar nenhuma dependência ou integração
Testes de Integração
Verifica que uma unidade tem o comportamento esperado quanto funciona integrada com as partes das quais
depende. Pode verificar a integração entre uma classe e o banco de dados, entre um módulo e um web service,
etc.
Tipos de Teste
X de testes
Tipos de teste
https://martinfowler.com/bliki/TestPyramid.html
OK. Vou
tentar!!!
Por onde eu
começo ?
Testes de Unidade
Teste de Unidade
● Deve ser simples e sem dependências externas
● Sem anotações do tipo @SpringBootTest
● Pode ou não fazer uso de mock
● Princípio FIRST
FIRST: Fast, Independent, Repeatable, Self-Verifying, Timely
Exemplo de teste de unidade
Classe CalculadoraSimples com apenas um método
public double calcula(double val1, double val2, String
operador)
Uma Classe de teste usando JUnit
Teste de Unidade - F-I-R-S-T
● F: Fast. Tem que ser rápido do tipo menos de 1 segundo
● I: Independent. Um teste não pode depender de outro, inclusive podendo rodar em
qualquer ordem. Isolado
● R: Repeatable. Um teste pode ser executado quantas vezes eu quiser e quando eu
quiser e sempre deve retornar no mesmo resultado.
● S: Self-Verifying. Auto verificado. O teste deve saber quando sua execução foi correta
ou quando falhou. Uso de assert;
● T: Timely. Oportuno. O teste deve ser criado no momento certo.
Teste de Unidade - Padrão AAA
AAA (Arrange, Act, Assert)
● Cenário (Entrada). Pode ser no próprio método de teste ou nos métodos Before
● Ação. Executa a ação contra o método alvo
● Validação. Verifica o retorno
Teste de Unidade - Pacote
● A classe de teste deve obedecer a mesma estrutura de pacotes que a classe
alvo, pois é possível acessar as variáveis públicas, protegidas e default.
Caso contrário, somente as públicas serão visualizadas. Então a boa prática
é sempre deixar no mesmo pacote.
Teste de Unidade - Before e After
● Os métodos @Before e @After são executados respectivamente antes e
depois de cada teste. O Before é mais utilizado.
● Caso seu cenário seja utilizado por muitos testes e precise ser criado apenas
uma vez, utilize as anotações @BeforeClass e @AfterClass (ambos os
métodos devem ser estáticos)
Teste de Unidade - Ordem de execução
O Junit não garante a ordem de execução, por isso, não deixe seus testes
dependentes uns dos outros. Existem formas de fazer o Junit executar os testes
em sequência utilizando a anotação @FixMethodOrder, porém não é uma boa
prática.
Teste de Unidade - Asserts
● Assert.assertTrue
● Assert.assertFalse
● Assert.assertEquals
● Assert.assertThat with fluent interface
● Core Matchers hamcrest
Formas de organizar o teste
Várias assertivas podem ser problema no seu teste. Caso o teste falhe nas primeiras assertivas. Caso o cenário e ação forem os
mesmos, sem problemas ter vários asserts
Prós: concentra a lógica do mesmo teste
Cons: não é rastreável
Quando precisar agrupar muitos Asserts no teste, utilize o ErrorCollector
Teste de Unidade - Hamcrest vs. AssertJ
Teste de Unidade - Hamcrest vs. AssertJ
Testes de Unidade - Verificando a cobertura
Após escrever alguns testes, verificamos a cobertura.
Alto % de cobertura garante a qualidade?
Mocks
Testes de Unidade - Mocks
Testes de Unidade - Mockito
Testes de Unidade - Mock
Testes de Unidade - Mock
Teste Integrado
Teste Integrado
REST API
Database
Teste Integrado - Database
Testcontainers is a Java library that supports JUnit tests, providing lightweight,
throwaway instances of common databases, Selenium web browsers, or anything
else that can run in a Docker container.
+
Teste Integrado - Rest API
REST Assured is a Java DSL for simplifying testing of REST based services built on top
of HTTP Builder
Perguntas
Obrigado!
https://github.com/sandrogiacom
https://www.linkedin.com/in/sandrogiacomozzi

Mais conteúdo relacionado

PPTX
Testes unitários com Qunit
PDF
Padrões para Desenvolvimento de Software Guiado por Testes
PDF
Mock it with mockito
PPTX
Testes Unitários
PPTX
Testes Unitários/Integrados
PPTX
Por que automatizar testes de software?
PPTX
Boas práticas com TDD
PPT
Testes Automatizados de Software
Testes unitários com Qunit
Padrões para Desenvolvimento de Software Guiado por Testes
Mock it with mockito
Testes Unitários
Testes Unitários/Integrados
Por que automatizar testes de software?
Boas práticas com TDD
Testes Automatizados de Software

Mais procurados (20)

PPTX
Apresentacao Testes de Unidade
PPTX
Introdução a testes automatizados
PPT
Introducao a Dubles de Testes
PDF
A importância dos testes unitários: do código legado ao pipeline de testes em...
PPTX
Testes Unitários usando TestNG
PPTX
Java: Excecoes e Tratamento de Erros
PPTX
Unit Testing
DOC
Testes de Sistema
PDF
Aexo TI - Boas práticas de testes tdd
PPT
Junit 4.0
PPT
PDF
TDD com Python
PPTX
Testes de unidade - RP Tec Com
PPTX
Apresentação lições aprendidas
ODP
Mini aula de teste de software
PPTX
Apresentação lições aprendidas
PDF
Testes de Unidade - Unidade II
PPTX
Teste agora! Não deixe para depois!
PDF
Palestra Testes Unidade Com JUnit
Apresentacao Testes de Unidade
Introdução a testes automatizados
Introducao a Dubles de Testes
A importância dos testes unitários: do código legado ao pipeline de testes em...
Testes Unitários usando TestNG
Java: Excecoes e Tratamento de Erros
Unit Testing
Testes de Sistema
Aexo TI - Boas práticas de testes tdd
Junit 4.0
TDD com Python
Testes de unidade - RP Tec Com
Apresentação lições aprendidas
Mini aula de teste de software
Apresentação lições aprendidas
Testes de Unidade - Unidade II
Teste agora! Não deixe para depois!
Palestra Testes Unidade Com JUnit
Anúncio

Semelhante a Pensando em java univali turbinando seus testes (20)

PDF
J unit xp
PPT
Treinamento Testes Unitários - parte 1
PDF
Testes Funcionais - Unidade IV
PDF
Fases testes
PDF
Testes de Unidade com Junit
PDF
Exemplos de como realizar Testes de Software
PPTX
1 2 3 - Testando - Automatizando os testes de software
PPTX
Workshop - Plano de Testes End to End com o Microsoft Test Manager
PPTX
Testes Unitários
PDF
Ctai Teste De Software Aula 1
PPT
Treinamento Testes Unitários - parte 2
PDF
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
PPTX
Desenvolvimento Dirigido por Testes
PPT
Testes de Sofware
PPT
Minicurso - Teste de software (CACSI 2015)
PPT
O que é Teste de Software?
KEY
Android testing PT-BR
PPTX
Apresentação testes white box
PDF
Teste de Integração - Unidade III
PPTX
Introdução a tdd
J unit xp
Treinamento Testes Unitários - parte 1
Testes Funcionais - Unidade IV
Fases testes
Testes de Unidade com Junit
Exemplos de como realizar Testes de Software
1 2 3 - Testando - Automatizando os testes de software
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Testes Unitários
Ctai Teste De Software Aula 1
Treinamento Testes Unitários - parte 2
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
Desenvolvimento Dirigido por Testes
Testes de Sofware
Minicurso - Teste de software (CACSI 2015)
O que é Teste de Software?
Android testing PT-BR
Apresentação testes white box
Teste de Integração - Unidade III
Introdução a tdd
Anúncio

Mais de Sandro Giacomozzi (6)

PDF
Java em 2021
PDF
Gerencie sua carreira. Seja um desenvolvedor melhor!
PPTX
Kubernetes for java developers
PPTX
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
PPTX
Java enterprise - testcontainers
PPT
TDC 2017 JavaEE Monitoramento
Java em 2021
Gerencie sua carreira. Seja um desenvolvedor melhor!
Kubernetes for java developers
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
Java enterprise - testcontainers
TDC 2017 JavaEE Monitoramento

Último (14)

PDF
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
PDF
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
PDF
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
PPT
09_Evolucao de software e_Refatoracao.ppt
PDF
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
PPT
00_Apresentacao sobre o livro do sommerville_ES.ppt
PPT
03_slide de Gerenciamento de Projetos .ppt
PPT
05_slide especificacao de sistemas de software e a uml UML.ppt
PDF
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
PPT
06_slide de Arquitetura_de_Software .ppt
PPT
10_ slides de Reuso sommerville cap 10.ppt
PPT
07_slides de Estilos_Arquiteturais sommerville.ppt
PPT
04_slide Requisitos de software_capitulo4
PPTX
Aula_IoT internet das coisas para iniciantes
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
09_Evolucao de software e_Refatoracao.ppt
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
00_Apresentacao sobre o livro do sommerville_ES.ppt
03_slide de Gerenciamento de Projetos .ppt
05_slide especificacao de sistemas de software e a uml UML.ppt
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
06_slide de Arquitetura_de_Software .ppt
10_ slides de Reuso sommerville cap 10.ppt
07_slides de Estilos_Arquiteturais sommerville.ppt
04_slide Requisitos de software_capitulo4
Aula_IoT internet das coisas para iniciantes

Pensando em java univali turbinando seus testes

  • 2. Turbinar os testes? Mas eu sou desenvolvedor, não faço testes!!! Testes são de responsabilidade da equipe de qualidade.
  • 3. O que podemos fazer como desenvolvedores ? Testes de Unidade Verifica uma unidade (a menor parte do software) para garantir que tem o comportamento esperado. Neste tipo de teste, a unidade é testada de forma isolada, sem considerar nenhuma dependência ou integração Testes de Integração Verifica que uma unidade tem o comportamento esperado quanto funciona integrada com as partes das quais depende. Pode verificar a integração entre uma classe e o banco de dados, entre um módulo e um web service, etc.
  • 9. Teste de Unidade ● Deve ser simples e sem dependências externas ● Sem anotações do tipo @SpringBootTest ● Pode ou não fazer uso de mock ● Princípio FIRST FIRST: Fast, Independent, Repeatable, Self-Verifying, Timely
  • 10. Exemplo de teste de unidade Classe CalculadoraSimples com apenas um método public double calcula(double val1, double val2, String operador) Uma Classe de teste usando JUnit
  • 11. Teste de Unidade - F-I-R-S-T ● F: Fast. Tem que ser rápido do tipo menos de 1 segundo ● I: Independent. Um teste não pode depender de outro, inclusive podendo rodar em qualquer ordem. Isolado ● R: Repeatable. Um teste pode ser executado quantas vezes eu quiser e quando eu quiser e sempre deve retornar no mesmo resultado. ● S: Self-Verifying. Auto verificado. O teste deve saber quando sua execução foi correta ou quando falhou. Uso de assert; ● T: Timely. Oportuno. O teste deve ser criado no momento certo.
  • 12. Teste de Unidade - Padrão AAA AAA (Arrange, Act, Assert) ● Cenário (Entrada). Pode ser no próprio método de teste ou nos métodos Before ● Ação. Executa a ação contra o método alvo ● Validação. Verifica o retorno
  • 13. Teste de Unidade - Pacote ● A classe de teste deve obedecer a mesma estrutura de pacotes que a classe alvo, pois é possível acessar as variáveis públicas, protegidas e default. Caso contrário, somente as públicas serão visualizadas. Então a boa prática é sempre deixar no mesmo pacote.
  • 14. Teste de Unidade - Before e After ● Os métodos @Before e @After são executados respectivamente antes e depois de cada teste. O Before é mais utilizado. ● Caso seu cenário seja utilizado por muitos testes e precise ser criado apenas uma vez, utilize as anotações @BeforeClass e @AfterClass (ambos os métodos devem ser estáticos)
  • 15. Teste de Unidade - Ordem de execução O Junit não garante a ordem de execução, por isso, não deixe seus testes dependentes uns dos outros. Existem formas de fazer o Junit executar os testes em sequência utilizando a anotação @FixMethodOrder, porém não é uma boa prática.
  • 16. Teste de Unidade - Asserts ● Assert.assertTrue ● Assert.assertFalse ● Assert.assertEquals ● Assert.assertThat with fluent interface ● Core Matchers hamcrest Formas de organizar o teste Várias assertivas podem ser problema no seu teste. Caso o teste falhe nas primeiras assertivas. Caso o cenário e ação forem os mesmos, sem problemas ter vários asserts Prós: concentra a lógica do mesmo teste Cons: não é rastreável Quando precisar agrupar muitos Asserts no teste, utilize o ErrorCollector
  • 17. Teste de Unidade - Hamcrest vs. AssertJ
  • 18. Teste de Unidade - Hamcrest vs. AssertJ
  • 19. Testes de Unidade - Verificando a cobertura Após escrever alguns testes, verificamos a cobertura. Alto % de cobertura garante a qualidade?
  • 20. Mocks
  • 21. Testes de Unidade - Mocks
  • 22. Testes de Unidade - Mockito
  • 27. Teste Integrado - Database Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container. +
  • 28. Teste Integrado - Rest API REST Assured is a Java DSL for simplifying testing of REST based services built on top of HTTP Builder

Notas do Editor

  • #3: Se você pensa assim, pense novamente. Devops. você é responsável por aquilo que você produz Cada vez mais as empresas valorizam este tipo de profissional
  • #4: Porque eu deveria escrever um teste de soma?
  • #7: show calc code
  • #8: Exemplo de um teste estúpido. calculadora
  • #17: não consigo escrever teste do meu método. qual o problema? não sei escrever teste ou o design do metodo pode ser melhorado?
  • #18: AssertJ permite uso de autocomplete
  • #19: AssertJ permite uso de autocomplete
  • #22: Exemplo da CalculadoraService
  • #23: CalculadoraServiceTest
  • #24: CalculadoraServiceTest doNothing().when(repositorio).salvaCalculo(new Calculadora());
  • #28: throwaway instâncias descartáveis DbMigrationIT System.out.println("mysql --user=" + mySql.getUsername() + " --password=" + mySql.getPassword() + " " + mySql.getDatabaseName()); Thread.sleep(60 * 2000);
  • #29: UserControllerIT