Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Peça seu código em casamento: TDD do jeito certo

Peça seu código em casamento: TDD do jeito certo

Apresentação realizada no FISL12 em Julho de 2011. A apresentação tem foco em como testar seu código de forma efetiva e mostra como usar o PyVows uma suite de testes para a linguagem Python.

Avatar for Rafael Caricio

Rafael Caricio

April 18, 2012
Tweet

Other Decks in Programming

Transcript

  1. Como confiar e amar seu código e assim casar com

    ele... TDD, Votos e Tópicos quinta-feira, 30 de junho de 2011
  2. O que é um teste? Um bloco de código que

    descreve um comportamento desejado. * quinta-feira, 30 de junho de 2011
  3. 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
  4. 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
  5. 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
  6. O que eu posso usar para testar meu código? -

    unittest - Nose - pytest - pyVows quinta-feira, 30 de junho de 2011
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. Gostei do “expect”, mas não tem um que atenda minha

    necessidade! quinta-feira, 30 de junho de 2011
  14. Gostei do “expect”, mas não tem um que atenda minha

    necessidade! Crie um! :) quinta-feira, 30 de junho de 2011
  15. 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
  16. Certo, mas como instalo o pyVows? $ pip install pyvows

    quinta-feira, 30 de junho de 2011
  17. @rafaelcaricio [email protected] Dúvidas? A hora é agora! Peça seu código

    em casamento: TDD do jeito certo! quinta-feira, 30 de junho de 2011