Post on 11-Jun-2015
description
Sobre mim
Rodrigo Dumont
Engenheiro de Software
Trabalho na VTEX
rodrigodumont.com
rdumont
10/11/2013Rodrigo Dumont 2
Motivação
Se testes forem difíceis:
Eu não vou testar tanto
Não vou saber saber se algo quebrou
Feedback demorado
… ou pior: código em produção com erros
10/11/2013Rodrigo Dumont 15
A velha questão do custo
10/11/2013Rodrigo Dumont 16
projeto desenvolvimento integração entrega
$$
cu
sto
Testes automatizados devem:
Ter pré-requisitos sucintos
Ser facilmente executáveis
Ser legíveis
Ter resultado legível
10/11/2013Rodrigo Dumont 17
Estrutura de um teste
10/11/2013Rodrigo Dumont 18
Pré-condição
Teste
Pós-condição
Contexto
Ação
Verificação
Arrumar
Agir
Afirmar
Conhecem isso?
== Inicializar valores=declararparm baralho1 int 1=declararparm baralho2 int 2=declararparm AsOur int 0=declararparm DoisOur int 1=declararparm TresOur int 2=declararparm QuatroOur int 3
== Comparar naipes=compararnaipe baralho2 AsOur CincoOur NpIgual=compararnaipe baralho2 AsPau SeisCop NpDifer
== Comparar valores=compararvalor baralho2 TresPau TresOur VlIgual=compararvalor baralho2 AsPau SeisCop VlDifer
10/11/2013Rodrigo Dumont 19
Contexto
Ação
Verificação
Testes unitários
São muito rápidos ( < 30s)
Testam unidades de
código isoladamente
Parte do processo de Test-
Driven Development
10/11/2013Rodrigo Dumont 20
FuncionalidadeOK OK OK
OK OK OK FAIL OK
OK OK OK OK OK
OK FAIL OK OK OK
Frameworks de testes
unitários
10/11/2013Rodrigo Dumont 22
JavaScript
Qunit
Mocha
Jasmine
.NET
NUnit
MSTest
xUnit.Net
Python
unittest
Java
JUnit
Testes de integração
São rápidos ( < 2min)
Testam a integração dos
componentes em cada
funcionalidade
Costuma integrar o
processo de Behaviour-
Driven Development
10/11/2013Rodrigo Dumont 23
Funcionalidade
OK ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
Behaviour Driven
Development
Artigo publicado por Dan North em 2006
Introducing BDD
Inspirou o projeto Cucumber
E, portanto, a linguagem Gherkin
“Acceptance criteria should be executable”
“Critérios de aceitação devem ser executáveis”
Dan North
Gherkin suporta vários
idiomas
Inglês
Feature: Sum
Scenario: Add two numbers
Given I have entered 50 into the calculator
And I have entered 70 into the calculator
When I press add
Then the result should be 120 on the screen
Gherkin suporta vários
idiomas
Português
Funcionalidade: Sum
Cenário: Somar dois números
Dado que escrevi 50 na calculadora
E que escrevi 70 na calculadora
Quando pressionar o botão de somar
Então o resultado na tela deverá ser 120
Gherkin suporta vários
idiomas
LOLCAT
OH HAI: Sum
MUSHUN: Add two numbers
I CAN HAZ entered 50 into the calculator
AN entered 70 into the calculator
WEN I press add
DEN the result should be 120 on the screen
Testes de Sistema
Geralmente são manuais
Podem ser automatizados
Testam interações completas
10/11/2013Rodrigo Dumont 29
Testando interfaces gráficas
Testes naturalmente frágeis
Selenium Web Driver
10/11/2013Rodrigo Dumont 30
Recapitulando
Execute o tempo todo os testes unitários! Eles devem:
Ser muito rápidos
Ser uito fáceis de executar
Ter grande cobertura do seu código
Não suba nada sem executar os testes de integração
Eles não devem demorar
Devem apontar problemas não cobertos pelos testes unitários
Observe atentamente os resultados dos testes de Sistema
Se houver falhas, volte à versão anterior
10/11/2013Rodrigo Dumont 31
Referências
The Art of Unit Testing
Ray Osherove
List of unit testing frameworks
(http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks)
Introducing BDD | Dan North (http://dannorth.net/introducing-bdd/)
Cucumber – Making BDD fun (http://cukes.info/)
Gherkin – Tool Support
(https://github.com/cucumber/gherkin/wiki/Tool-Support)
Selenium – Web Browser Automation (http://www.seleniumhq.org/)
10/11/2013Rodrigo Dumont 33