tdd com rspec




TDD com RSpec
tdd com rspec




Q vergonha




                 @leohackin




                      Raquin


Léo Hackin (Rá-kim)      Héquin
tdd com rspec
tdd com rspec
tdd com rspec




http://4.bp.blogspot.com/_KzayWGqkmgk/TEHXrMxoa3I/AAAAAAAAAfE/ON3rTQb-r20/s400/papel-higienico-cuba.jpg
tdd com rspec




          TDD
Test Driven Development

 Desenvolvimento orientado a testes


                                 Jura???
tdd com rspec




              Escreve código


             Testa no browser


Deu certo?                      Deu erro?


  #win!                          Corrige
tdd com rspec




       Problema 1




Modificações podem gerar BUGS
                 http://blog.arena41.com/wp-content/uploads/2010/03/computer-bug.png
tdd com rspec




                     bug #2
                                               Eu esperava :)
    Uhnn!
Estranho esse!
                                   bug #1



modificação                                   alteração ok




                                   erro #1
O cliente ligou!
      oO
                                                Viiixi! Zuou!
                   erro em prod.
http://givenmydruthers.files.wordpress.com/2010/02/snowball.jpg
tdd com rspec




       Problema 2




Testar manualmente é cansativo
                  http://anderssauro.com/wp-content/midia/a6f091ef93f5_1344B/boring.jpg
tdd com rspec




   Problema 3




Humanos fazendo testes
         http://2.bp.blogspot.com/-7_Sojkl9GKc/TebFfeHFzKI/AAAAAAAAARk/WBz-6PmwZyw/s1600/wtf5.jpg
Deu pau
 cara! :(
                                                                                     Ráááááá!




            http://1.bp.blogspot.com/-1UYXDHKjaCQ/TdLJA6uFbNI/AAAAAAAACAI/4814xUBjNFk/s1600/Sergio%2BMallandro%2Bfoto.JPG
tdd com rspec




     Problema 4


$$$$$$$$$$$$$$$$$$$$$$$$$$$




    Tempo é dinheiro
http://digitalparenting.files.wordpress.com/2010/12/cute-boy-playing-video-games-computer1.jpg
                                                                                                tdd com rspec
tdd com rspec




  Problema 5




O programador novo
        http://www.doublecrossstudios.co.uk/blogs/charlie/wp-content/uploads/2009/08/bustorbail.jpg
Problema 6




      Chefes não
    gostam de TDD



http://downloads.open4group.com/wallpapers/chefe-do-homer-assustador-bd76b.jpg
tdd com rspec




Problemas reais!

             Pissit! Quem falar
              ganhar prêmio!
tdd com rspec




Essa palestra é pra você!
    http://3.bp.blogspot.com/_YAefRFqmQKU/S85F77sD1KI/AAAAAAAAAJI/XB60ZTCF2ws/s1600/fail_square_wheel_tricycle_gtfo_n00b.jpg
tdd com rspec




Mas se você já testa ela
é pra você também! :)
tdd com rspec




             TDD
Desenvolvimento orientado a testes




Você testa primeiro! ;)
XP
tdd com rspec




Uia! Mas porque testar
      antes tio?
            Pode sim. A regra é
                  clara!
tdd com rspec




Pra que testar software

        antes

 de escrever o código?
1) Prever erros
             http://mondoauto.blogosfere.it/images/crashtest500.jpg
Não usei TDD né
                                        parceiro.




http://1.bp.blogspot.com/-1kLmITxLj4Q/TfZHfCLS5FI/AAAAAAAABUI/bEtZKAsoc5s/s1600/ro0naldo.jpg
tdd com rspec




                               Vamo
                             acertar! :)

             teste quebrou




modificação                   alteração ok
tdd com rspec




2) Melhorar o código da app
                   http://asiasociety.org/files/systems-thinking.png
tdd com rspec




XGH (Extreme Go Horse)




                  http://gohorseprocess.files.wordpress.com/2011/02/horse21.png
tdd com rspec




3) Software mais clean
    http://1.bp.blogspot.com/-ZR3B0a7whkM/TWXTcD4VOvI/AAAAAAAAAKA/QmoThFyL2PA/s1600/Interior-Design-Ideas-Screensaver.jpg
tdd com rspec




                  4) Confiança para alterar
http://wallpapers.free-review.net/wallpapers/54/Extreme_sport_from_rock_climbing_to_mountain_parachuting.jpg
tdd com rspec




5) teste automágicos
      http://2.bp.blogspot.com/-ZSv4lhC25lI/TiHVVPtiBzI/AAAAAAAAANE/H6BwrKiwR28/s1600/mister-m-704820.jpg
tdd com rspec
Tá
tudo testado chefe! Eu
        juro....
tdd com rspec




6) ajuda novos membros
               http://wallpapers.free-review.net/wallpapers/33/Programmer.jpg
tdd com rspec
tdd com rspec




        O que é um teste?

É um conjunto de condições (código) usado para
identificar erros e garantir que os requisitos de
  um software sejam plentamente atendidos.


 É um bloco de instruções para testar se a app
  está funcionando como deve e sem erros. ;)
tdd com rspec




           Tipos de teste


Unitário        Integração   Aceitação
tdd com rspec




        Teste Unitário

   Testa as entradas e saídas esperadas

Unidade = menor parte de código testável
Unidade = métodos de objeto, uma função
tdd com rspec




     Fluxo do TDD

           RED




REFACTOR            GREEN
tdd com rspec




        RED
Escreva um teste que falhe
tdd com rspec




       GREEN
Escreva o código necessário e
   faça o seu teste passar
tdd com rspec




       REFACTOR
Melhore o código que você escreveu :)
tdd com rspec




Frase chocante: TDD não
   é só sobre escrever
      testes e testar
tdd com rspec




TDD é sobre design.
tdd com rspec




http://www.starzlife.com/files/2010/03/ricky-martin.jpg
tdd com rspec




... de software ...
tdd com rspec




http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2011/7/1/1309538517951/Ricky-Martin.-007.jpg
http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/tdd.jpg
                                                                                         tdd com rspec




               O ciclo
  red->green->refactor
permite você refatorar e repensar sua
        app constantemente
tdd com rspec




Show me the code
tdd com rspec
tdd com rspec




Meio difícil de ler e
entender bem né?
tdd com rspec




                 Sentenças simples me daria
                     mais foco no teste



                                       Nomes de teste
                                       mais expressivos




                                             Behaviour é mais
                                            importante que test
      Dan North
http://dannorth.net/introducing-bdd/
tdd com rspec




         BDD
Behaviour Driven Development
tdd com rspec




BDD

      Descrever comportamento
Pensar no design e documentar o código
 Tornar o TDD mais acessível e efetivo
tdd com rspec
tdd com rspec




Mais fácil né?
tdd com rspec




        RSpec
Framework BDD para Ruby/RoR
tdd com rspec




RSpec helps you do the TDD part of that
equation, focusing on the documentation and
design aspects of TDD.

      David Chelimsky
tdd com rspec




Descreve o comportamento
como se fosse uma estória

  comportamento == nosso teste :)
tdd com rspec




http://carplace.virgula.uol.com.br/wp-content/uploads/2010/05/chevrolet-camaro-hennessey-01.jpg
tdd com rspec




   Instalação


  $ gem install rspec
$ gem install rspec-rails
tdd com rspec




 No seu projeto Rails

group :test, :development do
 gem "rspec-rails", "~> 2.6"
end

   inserir no arquivo Gemfile
tdd com rspec




Rodar na raiz do projeto


      $ rails g rspec:install
tdd com rspec




Escreva um teste




  spec/truth_spec.rb
tdd com rspec




Rode o spec! :D
tdd com rspec




Todos os testes devem
 estar na pasta spec e
 terminar em _spec.rb
tdd com rspec




                       Anatomia
descreva “a verdade”




   sentença

                             expectativa
describe
descreve de quem é o comportamento e agrupa
os exemplo
it
é a sentença que descreve um exemplo do
comportamento

should
verbo usado para dizer o que objeto “deveria”
retornar quando algo é feito
tdd com rspec




Ao bloco de teste damos
  o nome de exemplo
descreva carro

deveria ter rodas
deveria ligar quando rodar a chave
deveria ter uma marca
deveria ter um modelo
tdd com rspec




  Problema real
Post para um blog
tdd com rspec




    Post deveria ter ...

• Um título
• Um texto
• Um status
• O status deve ser “publicado” ou
  “rascunho”
tdd com rspec




        Post deveria...



• dizer se está publicado ou não
Live Coding
tdd com rspec




      Criando o model

$ rails g model post titulo:string
status:string texto:text
tdd com rspec




     Gerando a tabela

$ rake db:migrate
tdd com rspec
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




     Primeiro teste
Um post deve ter um título
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
Irado Manolo!
tdd com rspec




Precisa refatorar?
    spec/models/post_spec.rb
tdd com rspec




      Should e Expectations

Expectations são as expectativas de como
nosso código deveria se comportar

should > deveria

should_not > não deveria
tdd com rspec




         Matchers



Permitem escrever as
expectativas com uma
linguagem mais natural
tdd com rspec




           Matchers
               Apenas alguns




• be
• be_true
• be_false
• be_instance_of
• be_kind_of
• include
• respond_to
tdd com rspec




     Segundo teste
Um post deve ter um status
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Precisa refatorar?
    spec/models/post_spec.rb
tdd com rspec




Algo de errado não está certo
          spec/models/post_spec.rb
tdd com rspec




              Before e After
           Inicializando objetos antes e depois de cada exemplo




before(:each) e after(:each)
permite executar comandos antes e depois de
cada exemplo


before(:all) e after(:all)
permite executar comandos antes e depois de
todos os exemplos e comportamentos
tdd com rspec




        after(:each)
é rarararararamente usado
tdd com rspec




Refatorando :D
   spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




      Terceiro teste
    O status deve ser
“publicado” ou “rascunho”
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Opa! Refactoring!
     app/models/post.rb
tdd com rspec




Opa! Refactoring!
     app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




     Quarto teste
O post deve ter um texto

       Quem se habilita?
tdd com rspec




     Quinto teste
Dizer se está publicado

    Mais alguém se habilita?
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb




                                    Amazing!!!
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




E por ai vai ... :)
tdd com rspec




     Próximos passos

• Mock/Stubs
• Matchers mais avançados
• Fixtures
• Testes de controller
• Helpers
• Boas práticas de agrupamento
tdd com rspec




            O que ler

• http://rspec.info
• http://howtocode.com.br/ebooks/
  rspec
• http://pragprog.com/book/nrtest/rails-
  test-prescriptions
tdd com rspec
tdd com rspec




     Valew! :D

leohackin@gmail.com

[RockAndRails] TDD com RSpec