20. Tipos de Testes
➢ Testes de Carga
➢ Testes de UI
➢ Testes de Desempenho
➢ Testes de Integração
➢ Testes de Aceitação
➢ Testes Unitários
21. Testes unitários
Conjunto de programas individuais que
validam unidades de código (métodos,
procs, functions, entre outros) para determinar
que seu comportamento está correto
24. O que testar?
Fonte: http://blog.stevensanderson.com/2009/11/04/selective-unit-testing-costs-and-benefits/
25. Testes unitários em números
➢ Testes consomem entre 20% e 35% do projeto
➢ Redução de 5% a 10% no esforço de testes após a
automação
➢ Em aplicações pacote, automatização de testes atinge
50% de cobertura
26. Técnica para desenvolvimento de
software cujo processo é formado por
pequenas iterações e os testes são
escritos primeiro
TDD - Test Driven Development
27. Não é um método para testar software, mas
para (re)construir software!
TDD - Test Driven Development
28. Core do TDD
● Red: adicona um teste
que falha
● Green: Adiciona qualquer
código que faça o teste
passar
● Yellow: refatora o código
conforme o necessário
44. Hora da Prática
● O precisamos ter para realizar o tutorial:
o Ambiente Java configurado
o Maven instalado
o IDE
45. Hora da prática
Criando um projeto JAVA com testes utilizando
o Maven
mvn archetype:generate -DgroupId=br.com.heidertreinamentos -
DartifactId=exemplostestesunitarios -DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
48. Configuração do Maven
No pom.xml alterar a versão do junit para a
versão 4.10
Após isso atualizar as dependências:
mvn clean package
49. Importante
Não é necessário utilizar o Maven na criação
do projeto, porém ele é de grande importância
para gerenciar as dependências da sua
aplicação.
50. Antes de começar precisamos saber
Além dos casos de testes simples, temos 4
métodos que precisamos conhecer:
@BeforeClass
@AfterClass
@Before
@After
51. @BeforeClass
Nome de Método Padrão: setUpClass
Neste método devem ser colocados códigos que precisam ser executados
antes da criação de um objeto da classe de teste, ou seja, um código do qual
todos os métodos de teste podem tirar algum proveito. Pode ser a criação de
uma conexão com o banco de dados, por exemplo, ou a leitura de um arquivo
no sistema de arquivos.
A anotação que acompanha o método (@BeforeClass) pode ser adicionada a
qualquer método, e nesse caso, todos os métodos que tiverem essa anotação
serão executados na ordem em que aparecem declarados, e antes de
qualquer caso de teste específico.
52. @AfterClass
Nome de Método Padrão: tearDownClass()
Neste método deverão ser colocados códigos que precisam ser executados
assim que todos os casos de teste tiverem sido executados.
Tais códigos podem ser referentes a liberação de recursos adquiridos no
método setUpClass(), como o fechamento de conexões com o banco de
dados, ou à liberação de arquivos.
A anotação @AfterClass pode acompanhar qualquer método, e nesses casos
todos os métodos serão executados para a liberação de recursos, na ordem
em que aparecem declarados.
53. @Before
Nome de método padrão: setUp
O método setUp() pode ser utilizado para a inicialização de recursos antes da
execução de cada método de teste. É o local ideal para obter e inicializar
recursos que precisam ser reiniciados a cada teste.
Assim como as outras anotações, @Before pode ser adicionado a outros
métodos.
54. @After
Nome de Método Padrão: tearDown()
O método tearDown() é utilizado para a liberação de recursos ao final de cada
método de teste. Estes recursos geralmente são os que foram obtidos no
método setUp().
A anotação @After pode, assim como as demais, ser utilizada com outros
métodos.
56. Implementando o teste somar
O teste agora esta
implementado, porém
teremos erro já que ainda
não temos a classe
Calculadora. Crie a classe e
o método somar.
57. Implementando o teste somar
Implementamos o
teste somente para
passar conseguirmos
compilar e executar a
rotina de teste
59. Implementando o método somar
Ok, o teste passou, porém
ainda não esta pronto. O
próximo passo é realizar a
refatoração do código para
implementarmos a
funcionalidade soma. Após
isso, rodar o teste
novamente!!!
Método Implementado
66. Aaaahh usuário
Achávamos que a aplicação estava muito bem
feita. Daí o nosso querido usuário tentou
realizar uma divisão por 0. Adivinha o que
aconteceu???
67. Crashhhhhhh
Acabamos de encontrar um erro na nossa
aplicação. E agora???
Simples, vamos corrigir o método de divisão e
pronto, quando ele tentar novamente estara
funcionando :)
68. Calma ae parceiro
Nada disso, antes de implementarmos a
correção devemos criar um teste que seja
capaz de pegar o erro encontrado.
Vamos implementá-los.
69. Exemplo de implementação
No exemplo, sabemos que
a divisão por zero irá
retornar uma
ArithmeticException, para
isso, criamos um teste para
validar essa ação.
70. Hora de testar novamente
Ao rodarmos os testes, nos deparamos com a
exceção citada, agora devemos realizar a
correção no método de divisão.
72. Onde Baixar???
● Maven
o http://maven.apache.org/download.cgi
● JDK
o http://www.oracle.com/
● O exemplo
o https://github.com/heiderlopes/exemplostestesunitarios/
73. Onde baixar???
● Netbeans
o https://netbeans.org/downloads/
● Eclipse
o https://www.eclipse.org/downloads/
● IntelliJ
o http://www.jetbrains.com/idea/download/
74. Exercitando a mente I
● Testar o método para fazer saque em uma conta
o O método aceita dois valores: valor_saque,
valor_saldo
o O método deve retornar valor referente ao saldo da
conta após o saque ou -1 em situação de erro
75. Exercitando a mente II
● Testar o método para liberar a prova de Teste para Adultos
o O método aceita um valor do tipo Integer com a idade do
candidato
o A liberação da prova será mediante ao atendimento dos
critérios ou não
o O método deve retornar um boolean true caso a prova seja
liberada ou false em caso contrário
76. Exercitando a mente III
● Testar um método para realizar depósito em
uma conta bancária
o O método deve receber um flutuante com o valor a
ser depositado
o O método deve retornar o valor contido na conta
77. A mudança na forma de
desenvolver não é igual a
fazer miojo
78. A mudança na forma de desenvolver
No inicio você vai escrever código
mais ou menos testável
79. A mudança na forma de desenvolver
Você vai errar!!!
80. A mudança na forma de desenvolver
Você vai desejar ter feito as coisas de
forma diferente
81. A mudança na forma de desenvolver
Você vai evoluir!!!
82. A mudança na forma de desenvolver
Você não vai mais conseguir desenvolver
de outra forma
83. O que você pode fazer
Estime o tempo das suas
tarefas levando em conta os
testes unitários
84. O que você pode fazer
Comece testando o quer for mais fácil
85. O que você pode fazer
Dê prioridade à lógica principal da
aplicação
86. O que você pode fazer
Compartilhe com seus colegas os
benefícios que os testes unitários
podem trazer