peça seu código em casamento: tdd do jeito certo!
DESCRIPTION
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.TRANSCRIPT
![Page 1: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/1.jpg)
Peça seu código em casamento:TDD do jeito certo!@rafaelcaricio
quinta-feira, 30 de junho de 2011
![Page 2: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/2.jpg)
Quem sou eu?
@rafaelcaricio
quinta-feira, 30 de junho de 2011
![Page 3: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/3.jpg)
Quando você ama e confia...
quinta-feira, 30 de junho de 2011
![Page 4: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/4.jpg)
pede em casamento...
quinta-feira, 30 de junho de 2011
![Page 5: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/5.jpg)
Não vou ensinar a consseguir uma noiva (ou namorada)...
quinta-feira, 30 de junho de 2011
![Page 6: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/6.jpg)
Como confiar e amar seu código e assim casar com ele...
TDD, Votos e Tópicos
quinta-feira, 30 de junho de 2011
![Page 7: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/7.jpg)
Qual o problema?
Dificio manutençãoCódigo obscuro
Bugs...
quinta-feira, 30 de junho de 2011
![Page 8: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/8.jpg)
O que é Test Driven Development?
quinta-feira, 30 de junho de 2011
![Page 9: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/9.jpg)
O que é Test Driven Development?
quinta-feira, 30 de junho de 2011
![Page 10: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/10.jpg)
Test Test
Implement
Design
Fluxo de desenvolvimento
quinta-feira, 30 de junho de 2011
![Page 11: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/11.jpg)
O que é um teste?
Um bloco de código que descreve um comportamento desejado. *
quinta-feira, 30 de junho de 2011
![Page 12: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/12.jpg)
from friends import Tarsis
def test_falar_bonito(): tarsisazevedo = Tarsis() palavras = tarsisazevedo.fala(2) assert 2 == len(palavras)
Exemplo
quinta-feira, 30 de junho de 2011
![Page 13: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/13.jpg)
from friends import Tarsis
def test_falar_bonito(): tarsisazevedo = Tarsis() palavras = tarsisazevedo.fala(2) assert 2 == len(palavras)
Exemplo
O que você espera que vai acontecer!
quinta-feira, 30 de junho de 2011
![Page 14: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/14.jpg)
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
![Page 15: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/15.jpg)
Faça refactorydo seu código!
quinta-feira, 30 de junho de 2011
![Page 16: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/16.jpg)
class Tarsis():
def fala(self, numero_palavras): return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
![Page 17: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/17.jpg)
class Tarsis():
def fala(self, numero_palavras): return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
![Page 18: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/18.jpg)
class Tarsis():
def fala(self, numero_palavras): return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
![Page 19: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/19.jpg)
O que eu posso usar para testar meu código?
- unittest- Nose- pytest- pyVows
quinta-feira, 30 de junho de 2011
![Page 20: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/20.jpg)
def test_sum_returns_42(): result = add_two_numbers(41, 1) assert result assert int(result) assert result == 42
Vamos a um exemplo...
quinta-feira, 30 de junho de 2011
![Page 21: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/21.jpg)
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
Uma forma mais organizada...
quinta-feira, 30 de junho de 2011
![Page 22: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/22.jpg)
Muitos testes executando o mesmo código desnecessariamente
Repetição de código
Um teste com inúmeros asserts
Código ilegível
Alguns problemas identificados
quinta-feira, 30 de junho de 2011
![Page 23: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/23.jpg)
Muitos testes executando o mesmo código desnecessariamente
Repetição de código
Um teste com inúmeros asserts
Código ilegível Votos
Tópicos
Alguns problemas identificados
quinta-feira, 30 de junho de 2011
![Page 24: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/24.jpg)
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)
Uma boa ideia ...
quinta-feira, 30 de junho de 2011
![Page 25: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/25.jpg)
quinta-feira, 30 de junho de 2011
![Page 26: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/26.jpg)
quinta-feira, 30 de junho de 2011
![Page 27: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/27.jpg)
Um exemplo prático...
quinta-feira, 30 de junho de 2011
![Page 28: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/28.jpg)
Xiii... mas eu não gostei desse “expect”
quinta-feira, 30 de junho de 2011
![Page 29: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/29.jpg)
Xiii... mas eu não gostei desse “expect”
Use o assert! :)
quinta-feira, 30 de junho de 2011
![Page 30: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/30.jpg)
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
![Page 31: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/31.jpg)
Gostei do “expect”, mas não tem um que atenda minha necessidade!
quinta-feira, 30 de junho de 2011
![Page 32: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/32.jpg)
Gostei do “expect”, mas não tem um que atenda minha necessidade!
Crie um! :)
quinta-feira, 30 de junho de 2011
![Page 33: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/33.jpg)
Gostei do “expect”, mas não tem um que atenda minha necessidade!
Crie um! :)
@Vows.assertiondef 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
![Page 34: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/34.jpg)
Certo, mas como instalo o pyVows?
$ pip install pyvows
quinta-feira, 30 de junho de 2011
![Page 35: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/35.jpg)
•Tornado
•Django*
•...
Extensões
quinta-feira, 30 de junho de 2011
![Page 36: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/36.jpg)
https://github.com/heynemann/pyvows/
•Pull request
Como contribuir?
quinta-feira, 30 de junho de 2011
![Page 37: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/37.jpg)
Hora de jogar o buquê!
quinta-feira, 30 de junho de 2011
![Page 38: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/38.jpg)
Peça seu código em casamento:TDD do jeito certo!
quinta-feira, 30 de junho de 2011
![Page 39: Peça seu código em casamento: TDD do jeito certo!](https://reader033.vdocuments.pub/reader033/viewer/2022052907/55900b0b1a28abd03d8b456b/html5/thumbnails/39.jpg)
@rafaelcaricio
Dúvidas? A hora é agora!
Peça seu código em casamento:TDD do jeito certo!
quinta-feira, 30 de junho de 2011