Todo desenvolvedor de software deveria ter um relacionamento de intimidade com seu código, cuidar muito bem dele e declarar votos para selar este relacionamento. Será apresentada a mais nova suite de testes da linguagem Python que permite qualquer desenvolvedor pedir seu código em casamento fazer ele jurar que está fazendo o que deveria fazer e do jeito certo.
11. O que é um teste?
Um bloco de código que descreve um
comportamento desejado. *
quinta-feira, 30 de junho de 2011
12. Exemplo
from friends import Tarsis
def test_falar_bonito():
tarsisazevedo = Tarsis()
palavras = tarsisazevedo.fala(2)
assert 2 == len(palavras)
quinta-feira, 30 de junho de 2011
13. Exemplo
from friends import Tarsis
def test_falar_bonito():
tarsisazevedo = Tarsis()
palavras = tarsisazevedo.fala(2)
assert 2 == len(palavras)
O que você espera que vai
acontecer!
quinta-feira, 30 de junho de 2011
14. TDD não garante o melhor código!
def fala(o):
c = None
return [“foco”] * o
class Tarsis():
def __init__(self, *args, **kwargs):
pass
def fala(self, o):
print “aqui: ” + str(o)
a = fala(o)
return a
quinta-feira, 30 de junho de 2011
15. Faça refactory
do seu código!
quinta-feira, 30 de junho de 2011
16. class Tarsis():
def fala(self, numero_palavras):
return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
17. class Tarsis():
def fala(self, numero_palavras):
return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
18. class Tarsis():
def fala(self, numero_palavras):
return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
19. O que eu posso usar para
testar meu código?
- unittest
- Nose
- pytest
- pyVows
quinta-feira, 30 de junho de 2011
20. Vamos a um exemplo...
def test_sum_returns_42():
result = add_two_numbers(41, 1)
assert result
assert int(result)
assert result == 42
quinta-feira, 30 de junho de 2011
21. Uma forma mais organizada...
def test_sum_returns_result():
result = add_two_numbers(41, 1)
assert result
def test_sum_returns_a_number():
result = add_two_numbers(41, 1)
assert int(result)
def test_sum_returns_42():
result = add_two_numbers(41, 1)
assert result == 42
quinta-feira, 30 de junho de 2011
22. Alguns problemas identificados
Repetição de código
Muitos testes executando o mesmo
código desnecessariamente
Código ilegível
Um teste com inúmeros asserts
quinta-feira, 30 de junho de 2011
23. Alguns problemas identificados
Repetição de código Tópicos
Muitos testes executando o mesmo
código desnecessariamente
Código ilegível Votos
Um teste com inúmeros asserts
quinta-feira, 30 de junho de 2011
24. Uma boa ideia ...
class SumContext(Vows.Context):
def topic(self):
return add_two_numbers(41, 1)
def we_get_a_result(self, topic):
expect(topic).Not.to_be_null()
def we_get_a_number(self, topic):
expect(topic).to_be_numeric()
def we_get_42(self, topic):
expect(topic).to_equal(42)
quinta-feira, 30 de junho de 2011
28. Xiii... mas eu não gostei desse “expect”
quinta-feira, 30 de junho de 2011
29. Xiii... mas eu não gostei desse “expect”
Use o assert! :)
quinta-feira, 30 de junho de 2011
30. Xiii... mas eu não gostei desse “expect”
Use o assert! :)
class SumContext(Vows.Context):
def topic(self):
return add_two_numbers(41, 1)
def we_get_a_result(self, topic):
assert None != topic
quinta-feira, 30 de junho de 2011
31. Gostei do “expect”, mas não tem
um que atenda minha necessidade!
quinta-feira, 30 de junho de 2011
32. Gostei do “expect”, mas não tem
um que atenda minha necessidade!
Crie um! :)
quinta-feira, 30 de junho de 2011
33. Gostei do “expect”, mas não tem
um que atenda minha necessidade!
Crie um! :)
@Vows.assertion
def to_be_less_than_2(topic):
assert topic < 2
class SumContext(Vows.Context):
def topic(self):
return add_two_numbers(41, 1)
def we_get_a_result(self, topic):
expect(topic).to_be_less_than_2()
quinta-feira, 30 de junho de 2011
34. Certo, mas como instalo o pyVows?
$ pip install pyvows
quinta-feira, 30 de junho de 2011
35. Extensões
• Tornado
• Django*
• ...
quinta-feira, 30 de junho de 2011
36. Como contribuir?
• Pull request
https://github.com/heynemann/pyvows/
quinta-feira, 30 de junho de 2011
37. Hora de jogar o buquê!
quinta-feira, 30 de junho de 2011
38. Peça seu código
em casamento:
TDD do jeito certo!
quinta-feira, 30 de junho de 2011
39. Dúvidas?
A hora é agora!
Peça seu código
em casamento:
TDD do jeito certo!
@rafaelcaricio
rafael@caricio.com
quinta-feira, 30 de junho de 2011