TD D
Test-driven development
por que
testamos?
como
testamos?
TE S TE S
M ANUAIS
   :(
TE S TE S
AUTO M ATIZAD O S
       :)
Antes do TD D ...
código escrito
antes dos testes...
é difícil de testar...
é difícil de usar...
design
TD D é mais que testes,
é um método para design
de software.
Testes verificam a
usabilidade do código
Adição novas funcionalidades
em pequenos passos
Feedback rápido
das mudanças no código
Não quero usar TD D !!!
“Você não tem tempo para escrever
testes unitários, porque gasta
tempo demais debugando.”
M udança de hábito
R efactoring
Ferramentas
Selenium
S tubs
S tubs
//criar mock
LinkedList mockedList = mock(LinkedList.class);

//stubbing...
when(mockedList.get(0)).thenReturn(“first”);

//imprime “first”
System.out.prinlnt(mockedList.get(0));

//imprime “null” não criamos stub para get(999)
System.out.println(mockedList.get(999));
M ocks
import static org.mockito.Mockito.*;

//criar mock
List mockedList = mock(List.class);

//usando o objeto mock
mockedList.add(“one”);
mockedList.clear();

//verificando interação
verify(mockedList).add(“one”);
verify(mockedList).clear();




M ocks
S tubs testam o estado
dos objetos após
execução
M ocks testam a
interação entre
objetos durante
execução
M ão na massa
C alculadora

           - S omar dois números inteiros

          - S ubtrair dois números inteiros

         - M ultiplicar dois número inteiros

               - D ividir dois número inteiros
O problema com Test-D riven
D evelopment é a palavra “Teste”
BDD
B ehavior-D riven D evelopment
public class CalculadoraSpec {

    @Test
    public void deveSomarDoisInteiros() {
        ...
    }

    @Test
    public void deveSubtrairDoisInteiros() {
        ...
    }

    //outros métodos
}
E specificação
C onta C orrente
- Um depósito deve aumentar o saldo da
conta...
- Um saque deve diminuir o saldo da conta...
- Não deve permitir efetuar um saque
quando saldo é insuficiente...
- Um erro deve ocorrer caso um depósito
com valor negativo seja realizado...
- Um erro deve ocorrer em caso de saque de
valor negativo...
“E screva código novo apenas se
você primeiro tiver um teste
falhando.”
Kent B eck
insidecode.com.br
  blog.insidecode.com.br

leonardo@ insidecode.com.br

@ insidecode @ leonardom

TDD - Test Driven Development