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

TDD e o programador confiante (4 Dev In Santos ...

TDD e o programador confiante (4 Dev In Santos - nov/2012)

Entendendo o desenvolvimento guiado por testes através da criação de um framework... de teste!

- O pavor da tela branca, por onde começar?
- Porque o teste vem antes?
- Tudo que você precisa é um assert(true) maroto, e nada mais!
- Preciso testar tudo, tudo mesmo?
- Uma suíte de testes verdinha e o fator psicológico.

Hoje em dia o termo TDD já é conhecido por muitos desenvolvedores. Mas existem alguns conceitos por trás dessa prática que ainda assustam um pouco os recém chegados. Nesse talk vou discutir sobre esses pontos mais obscuros e mostrar a criação de um programa para auxiliar a prática do TDD a partir do zero, usando a técnica como apoio.

Ricardo Valeriano

November 10, 2012
Tweet

More Decks by Ricardo Valeriano

Other Decks in Programming

Transcript

  1. TDD e o Desenvolvedor Confiante Entendendo o desenvolvimento guiado por

    testes através da criação de um framework... de teste! Monday, November 12, 12
  2. Um teste de unidade pode ajudar a mostrar o real

    problema. Monday, November 12, 12
  3. Kent Beck JUnit (xUnit) public void testSomething() { Robot mandy

    = new Robot(); String said = mand.say(); assertEquals("Hello World, blip", said); } Monday, November 12, 12
  4. Um ótimo jeito de aprender uma nova linguagem: escrever um

    framework xUnit nessa linguagem. Monday, November 12, 12
  5. Ruby! # comentario def hello "hello world" end puts hello

    # mostra hello Monday, November 12, 12
  6. Ruby class Robot def say(to_someone) "hello #{to_someone}" end end #

    parenteses (quase sempre) opcionais puts mandy.say "Valeriano" mandy = Robot.new said = mandy.say("Ricardo") puts said # mostra 'hello Ricardo' Monday, November 12, 12
  7. Ruby class Robot def initialize(name) @name = name end end

    robot = Robot.new("mandy") def whoami @name end puts robot.whoami # exibe 'mandy' Monday, November 12, 12
  8. Ruby class Robot def is_active? true end end mandy =

    Robot.new if mandy.is_active? puts "Mandy is active! :D" end # exibe Mandy is active! :D Monday, November 12, 12
  9. Ruby begin rescue => e puts e.message end raise "OMG!

    Y U NO WORK!?" # "OMG! Y U NO WORK!?" Monday, November 12, 12
  10. teste = InvocadorDeMetodos("meu_metodo") Definindo uma interface Como eu gostaria que

    fosse? puts teste.invocou? # false! teste.invoca puts teste.invocou? # true! Monday, November 12, 12
  11. red green refactor escreva um teste que falha faça o

    teste passar refatore Monday, November 12, 12
  12. xprogramming.com Test everything; eliminate duplication; express all ideas; minimize entities:These

    few simple rules, applied locally, can help a high quality global design to emerge. Monday, November 12, 12
  13. true, false, false, true true, false, false, true true, false,

    false, true true, false, false, true true, doido, false, true true, false, false, true true, false, false, true Monday, November 12, 12
  14. true, false, false, true true, false, false, true true, false,

    false, true true, false, false, true true, doido, false, true true, false, false, true true, false, false, true Monday, November 12, 12
  15. red green refactor escreva um teste que falha faça o

    teste passar refatore Monday, November 12, 12
  16. xprogramming.com Test everything; eliminate duplication; express all ideas; minimize entities:These

    few simple rules, applied locally, can help a high quality global design to emerge. Monday, November 12, 12
  17. Arrange? xUnit: setup class TestClassForTestCase < TestCase def setup @teste

    = TesteRodou.new "meu_metodo" end def test_run assert([email protected]?) @teste.run assert(@teste.rodou?) end end Monday, November 12, 12
  18. red green refactor escreva um teste que falha faça o

    teste passar refatore refatore os testes Monday, November 12, 12