Upload
rafael-caricio
View
1.076
Download
3
Embed Size (px)
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.
Citation preview
Peça seu código em casamento:TDD do jeito certo!@rafaelcaricio
quinta-feira, 30 de junho de 2011
Quem sou eu?
@rafaelcaricio
quinta-feira, 30 de junho de 2011
Quando você ama e confia...
quinta-feira, 30 de junho de 2011
pede em casamento...
quinta-feira, 30 de junho de 2011
Não vou ensinar a consseguir uma noiva (ou namorada)...
quinta-feira, 30 de junho de 2011
Como confiar e amar seu código e assim casar com ele...
TDD, Votos e Tópicos
quinta-feira, 30 de junho de 2011
Qual o problema?
Dificio manutençãoCódigo obscuro
Bugs...
quinta-feira, 30 de junho de 2011
O que é Test Driven Development?
quinta-feira, 30 de junho de 2011
O que é Test Driven Development?
quinta-feira, 30 de junho de 2011
Test Test
Implement
Design
Fluxo de desenvolvimento
quinta-feira, 30 de junho de 2011
O que é um teste?
Um bloco de código que descreve um comportamento desejado. *
quinta-feira, 30 de junho de 2011
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
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
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
Faça refactorydo seu código!
quinta-feira, 30 de junho de 2011
class Tarsis():
def fala(self, numero_palavras): return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
class Tarsis():
def fala(self, numero_palavras): return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
class Tarsis():
def fala(self, numero_palavras): return [“foco”] * numero_palavras
quinta-feira, 30 de junho de 2011
O que eu posso usar para testar meu código?
- unittest- Nose- pytest- pyVows
quinta-feira, 30 de junho de 2011
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
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
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
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
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
quinta-feira, 30 de junho de 2011
quinta-feira, 30 de junho de 2011
Um exemplo prático...
quinta-feira, 30 de junho de 2011
Xiii... mas eu não gostei desse “expect”
quinta-feira, 30 de junho de 2011
Xiii... mas eu não gostei desse “expect”
Use o assert! :)
quinta-feira, 30 de junho de 2011
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
Gostei do “expect”, mas não tem um que atenda minha necessidade!
quinta-feira, 30 de junho de 2011
Gostei do “expect”, mas não tem um que atenda minha necessidade!
Crie um! :)
quinta-feira, 30 de junho de 2011
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
Certo, mas como instalo o pyVows?
$ pip install pyvows
quinta-feira, 30 de junho de 2011
•Tornado
•Django*
•...
Extensões
quinta-feira, 30 de junho de 2011
https://github.com/heynemann/pyvows/
•Pull request
Como contribuir?
quinta-feira, 30 de junho de 2011
Hora de jogar o buquê!
quinta-feira, 30 de junho de 2011
Peça seu código em casamento:TDD do jeito certo!
quinta-feira, 30 de junho de 2011
@rafaelcaricio
Dúvidas? A hora é agora!
Peça seu código em casamento:TDD do jeito certo!
quinta-feira, 30 de junho de 2011