SlideShare uma empresa Scribd logo
Dito TechTalk:  Behavior Driven Development (BDD) rSpec Dito – Idéias & Soluções Novembro 2008
Behavior Driven Development Dan North’s response to TDD (Test-Driven Development) Testar primeiro! Por que? para programar com o teste em mente BDD  = TDD com vocabulário focado no comportamento (behavior) e não testes.
Behavior Driven Development com rSpec Cada característica (feature) é uma “story” Story As a ... [role] I want to ... [some action] So that ... [business value!]
Behavior Driven Development com rSpec Scenarios G W T  – Given, When, Then Scenario: título Given: [um contexto] And: opcional When: evento Then: resultado Scenario: outro variante...
G W T Given Setup pre requisitos Setup estado Exemplo: Given a user called Dave And Dave is logged in When Ações feitas pelo ator Exemplo: When I click the ‘profile’ link When I enter my new password and confirmation And click the ‘Change my password’ button Then Define o resultado das suas ações Exemplo: Then I should see my profile page And it should list how many items I have bought
Processo Escrever uma “Story” Escrever especificações para os controllers Escrever os controllers Escrever especificações para os models Escrever os models Executar a “Story”
Instalando rSpec Para testar apenas código Ruby sem aplicação Rails basta executar o comando: gem install rspec rSpec on Rails : Versão 1.1.4 o rSpec utiliza o  Github , vamos apenas clonar seu repositório com os comandos: cd vendor/plugins git clone git://github.com/dchelimsky/rspec.git cd rspec git checkout 1.1.4 cd .. git clone git://github.com/dchelimsky/rspec-rails.git cd rspec-rails git checkout 1.1.4 cd ../../../
rSpec on Rails Para criar um diretório (spec) com todos os arquivos necessários para o Rails utilizar o rSpec basta executar o generate: script/generate rspec
Aplicação Aplicando rSpec no projeto  pilates Requisitos básicos: Uma  pessoa   pode ter vários   lancamentos Uma  pessoa   deve ter um   nome, login, email  e  uma   senha Temos então: Um  “usuário”   com  um  “name”   relacionado  a vários  “tasks”
Modelo Usuário Para criar o modelo usuário temos generators do próprio rSpec. script/generate rspec_model  Usuario  name:string login:string email:string crypted_password:string rake db:migrate Junto com este model foi gerado um arquivo de teste para o modelo, no dir:  “spec/models/usuario_spec.rb” É neste arquivo que vamos escrever as  especificações . Uma especificação pode ser escrita usando o método  it , que deve estar associado a um outro método,  describe . Com eles podemos validar um contexto.
Especificações do Usuário O método  describe  Usuario usa fixtures, com isso temos que adicionar alguns itens ao arquivo:  “spec/fixtures/usuarios.yml” Nosso método  it  usa lambda que especifica que o  usuario  existe, é invalido sem um  name , um  login , um  email , e um  crypted_password . Também especifica que deve possuir diversos  taks . Em um método privado  create_usuario , fazemos exatamente isso, criamos um  usuario  com um  name .
Fixtures spec/fixtures/usuarios.yml
Rodando os Testes - rake spec Rodando os Testes Rodando os Testes
Models app/models/usuario.rb Adicionamos as validações precisas no modelo  usuario Adicionamos também um relacionamento com o  modelo   task  que ainda não existe
Modelo Task Vamos criar o modelo Task com rspec model script/generate rspec_model  Task  titulo:string usuario:references rake db:migrate Requesitos do modelo Task:  Um Task pertence a um Usuario Um Task tem deve ter um titulo, usuario,
Especificações do Task As especificações do task são parecidas com a do usuario. Como por exemplo o método  describe  também usa fixtures, com isso temos que adicionar alguns itens ao arquivo:  “spec/fixtures/tasks.yml” Estamos especificando que o  task  existe, é invalido sem um  titulo. Também especifica que um task pertence a um  usuario . Em um método privado  create_task , criamos um  task  com um  titulo , e relacionado a um  usuario .
Fixtures spec/fixtures/tasks.yml
Models app/models/task.rb Adicionamos as validações precisas no modelo  task Adicionamos também um relacionamento com o  modelo   usuario.
Associações Task deve estar associado a um usuario script/generate rspec_model  Task  titulo:string  usuario:references Temos no banco:
Rodando os Testes Rodando os Testes Rodando os Testes - rake spec
DEPRECATION WARNING
Proporção de Testes em relação ao código - rake stats Temos 77 linhas de testes para 493 linhas de códigos, uma proporção muito pobre de 1:0,2 No site  brasigo.com.br  trabalham com uma proporção na faixa de 3 linhas de teste para cada linha de código, ou seja 1:3
Test::Unit para rSpec class  DogTest def   test_ bark assert_ algo def setup def teardown describe  Dog it  “should bark” object.should be _algo before  (:each) { } after  (:each) { }
Vantagens do rSpec em relação ao Test::Unit Linguagem de implementação das especificações é mais natural e flui melhor. O relatório gerado descreve os exemplos criados com mais clareza. A divisão de arquivos e diretório é muito parecida com a divisão natural do Rails entre controllers, models, views, e helpers. Existe uma integração com o AutoTest assim como o Test::Unit.
http://dannorth.net/introducing-bdd http://dannorth.net/whats-in-a-story   http://blog.improveit.com.br/articles/2008/01/23/rspec-e-textmate http://www.benmabey.com/2008/05/10/slides-and-code-from-my-bddrspec-presentation/   http://www.slideshare.net/rahoulb/telling-stories-with-rspec-presentation   http://blog.davidchelimsky.net/2008/6/16/slides-   http://www.joesniff.co.uk/ruby/telling-a-good-story-rspec-stories-from-the-trenches.html http://kpumuk.info/category/ruby-on-rails/ http://simplesideias.com.br/usando-o-rspec-para-testar-sua-aplicacao-rails-modelos/#comment-67581 http://rspec.info/documentation/test_unit.html http://www.nabble.com/alias-:calling-:lambda-td12789662.html Referências

Mais conteúdo relacionado

PDF
Como o Cucumber Funciona
Laís Berlatto
 
PDF
Cucumber: um breve review
Laís Berlatto
 
PDF
BDD com Cucumber
Eduardo Mendes
 
PPTX
Behavior Driven Development com Ruby on Rails
Marco Antonio Filho
 
PDF
Behaviour-Driven Development com Ruby
Jony dos Santos Kostetzer
 
PDF
Testando Rails apps com RSpec
Nando Vieira
 
PPT
BDD: Cucumber + Selenium + Java
Cesar Augusto Nogueira
 
PDF
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 
Como o Cucumber Funciona
Laís Berlatto
 
Cucumber: um breve review
Laís Berlatto
 
BDD com Cucumber
Eduardo Mendes
 
Behavior Driven Development com Ruby on Rails
Marco Antonio Filho
 
Behaviour-Driven Development com Ruby
Jony dos Santos Kostetzer
 
Testando Rails apps com RSpec
Nando Vieira
 
BDD: Cucumber + Selenium + Java
Cesar Augusto Nogueira
 
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 

Mais procurados (7)

PDF
Workshop calabash android
Gislaine Melo
 
PPTX
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
minastestingconference
 
PDF
Refinamento e boas práticas de programação
Aécio Costa
 
PDF
Não deixe para testar depois o que você pode testar antes.
Tchelinux
 
PDF
Ferramentas de automação de teste
Marcos Pessoa
 
PPTX
Teste Watir
Marcos André
 
PPTX
C# 6.0 - Interopmix 2015
Renato Groff
 
Workshop calabash android
Gislaine Melo
 
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
minastestingconference
 
Refinamento e boas práticas de programação
Aécio Costa
 
Não deixe para testar depois o que você pode testar antes.
Tchelinux
 
Ferramentas de automação de teste
Marcos Pessoa
 
Teste Watir
Marcos André
 
C# 6.0 - Interopmix 2015
Renato Groff
 
Anúncio

Semelhante a Dito Tech Talk RSpec (20)

PDF
RSpec - Testando suas aplicações Ruby on Rails
Hercules Lemke Merscher
 
KEY
Bdd rails 3
tchandy
 
KEY
Testes automatizados
Rodrigo Maia
 
PDF
Cuso Ruby - Aula 05 - Testes com RSpec
Maurício Linhares
 
PDF
RSpec Best Friends @ Rupy Natal 2014
Mauro George
 
KEY
Design Patterns on Rails
tchandy
 
PPT
Testes Automatizados em Ruby on Rails
Thiago Cifani
 
PDF
Ruby & Rails
Sergio Henrique
 
PDF
Minicurso Ruby on Rails
Maurício Eduardo
 
PDF
RSpec - Desenvolvimento Baseado em Teste
Eduardo Mendes
 
PDF
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Julio Monteiro
 
PDF
RSpec Best Friends @ TDC Florianópolis 2014
Mauro George
 
PPT
rails_and_agile
Juan Maiz
 
PPTX
Aula Ruby
Felipe Gadelha Ruoso
 
PDF
TDD - Prática com RSpec
Eduardo Mendes
 
PDF
Testes Rápidos
SuccesSoft LTDA
 
PPTX
Como Dominar seu Fluxo de Desenvolvimento com TDD
Rachid Calazans
 
PDF
RSpec Best Friends @ TDC São Paulo 2014
Mauro George
 
PDF
Esta começando a programar para a web? Então começe com Rails
ismaelstahelin
 
ODP
Lapidando ruby
mauricioszabo
 
RSpec - Testando suas aplicações Ruby on Rails
Hercules Lemke Merscher
 
Bdd rails 3
tchandy
 
Testes automatizados
Rodrigo Maia
 
Cuso Ruby - Aula 05 - Testes com RSpec
Maurício Linhares
 
RSpec Best Friends @ Rupy Natal 2014
Mauro George
 
Design Patterns on Rails
tchandy
 
Testes Automatizados em Ruby on Rails
Thiago Cifani
 
Ruby & Rails
Sergio Henrique
 
Minicurso Ruby on Rails
Maurício Eduardo
 
RSpec - Desenvolvimento Baseado em Teste
Eduardo Mendes
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Julio Monteiro
 
RSpec Best Friends @ TDC Florianópolis 2014
Mauro George
 
rails_and_agile
Juan Maiz
 
TDD - Prática com RSpec
Eduardo Mendes
 
Testes Rápidos
SuccesSoft LTDA
 
Como Dominar seu Fluxo de Desenvolvimento com TDD
Rachid Calazans
 
RSpec Best Friends @ TDC São Paulo 2014
Mauro George
 
Esta começando a programar para a web? Então começe com Rails
ismaelstahelin
 
Lapidando ruby
mauricioszabo
 
Anúncio

Último (7)

PPTX
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
PDF
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
PPTX
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
PPTX
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
PPTX
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
PPTX
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
PDF
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 

Dito Tech Talk RSpec

  • 1. Dito TechTalk: Behavior Driven Development (BDD) rSpec Dito – Idéias & Soluções Novembro 2008
  • 2. Behavior Driven Development Dan North’s response to TDD (Test-Driven Development) Testar primeiro! Por que? para programar com o teste em mente BDD = TDD com vocabulário focado no comportamento (behavior) e não testes.
  • 3. Behavior Driven Development com rSpec Cada característica (feature) é uma “story” Story As a ... [role] I want to ... [some action] So that ... [business value!]
  • 4. Behavior Driven Development com rSpec Scenarios G W T – Given, When, Then Scenario: título Given: [um contexto] And: opcional When: evento Then: resultado Scenario: outro variante...
  • 5. G W T Given Setup pre requisitos Setup estado Exemplo: Given a user called Dave And Dave is logged in When Ações feitas pelo ator Exemplo: When I click the ‘profile’ link When I enter my new password and confirmation And click the ‘Change my password’ button Then Define o resultado das suas ações Exemplo: Then I should see my profile page And it should list how many items I have bought
  • 6. Processo Escrever uma “Story” Escrever especificações para os controllers Escrever os controllers Escrever especificações para os models Escrever os models Executar a “Story”
  • 7. Instalando rSpec Para testar apenas código Ruby sem aplicação Rails basta executar o comando: gem install rspec rSpec on Rails : Versão 1.1.4 o rSpec utiliza o Github , vamos apenas clonar seu repositório com os comandos: cd vendor/plugins git clone git://github.com/dchelimsky/rspec.git cd rspec git checkout 1.1.4 cd .. git clone git://github.com/dchelimsky/rspec-rails.git cd rspec-rails git checkout 1.1.4 cd ../../../
  • 8. rSpec on Rails Para criar um diretório (spec) com todos os arquivos necessários para o Rails utilizar o rSpec basta executar o generate: script/generate rspec
  • 9. Aplicação Aplicando rSpec no projeto pilates Requisitos básicos: Uma pessoa pode ter vários lancamentos Uma pessoa deve ter um nome, login, email e uma senha Temos então: Um “usuário” com um “name” relacionado a vários “tasks”
  • 10. Modelo Usuário Para criar o modelo usuário temos generators do próprio rSpec. script/generate rspec_model Usuario name:string login:string email:string crypted_password:string rake db:migrate Junto com este model foi gerado um arquivo de teste para o modelo, no dir: “spec/models/usuario_spec.rb” É neste arquivo que vamos escrever as especificações . Uma especificação pode ser escrita usando o método it , que deve estar associado a um outro método, describe . Com eles podemos validar um contexto.
  • 11. Especificações do Usuário O método describe Usuario usa fixtures, com isso temos que adicionar alguns itens ao arquivo: “spec/fixtures/usuarios.yml” Nosso método it usa lambda que especifica que o usuario existe, é invalido sem um name , um login , um email , e um crypted_password . Também especifica que deve possuir diversos taks . Em um método privado create_usuario , fazemos exatamente isso, criamos um usuario com um name .
  • 13. Rodando os Testes - rake spec Rodando os Testes Rodando os Testes
  • 14. Models app/models/usuario.rb Adicionamos as validações precisas no modelo usuario Adicionamos também um relacionamento com o modelo task que ainda não existe
  • 15. Modelo Task Vamos criar o modelo Task com rspec model script/generate rspec_model Task titulo:string usuario:references rake db:migrate Requesitos do modelo Task: Um Task pertence a um Usuario Um Task tem deve ter um titulo, usuario,
  • 16. Especificações do Task As especificações do task são parecidas com a do usuario. Como por exemplo o método describe também usa fixtures, com isso temos que adicionar alguns itens ao arquivo: “spec/fixtures/tasks.yml” Estamos especificando que o task existe, é invalido sem um titulo. Também especifica que um task pertence a um usuario . Em um método privado create_task , criamos um task com um titulo , e relacionado a um usuario .
  • 18. Models app/models/task.rb Adicionamos as validações precisas no modelo task Adicionamos também um relacionamento com o modelo usuario.
  • 19. Associações Task deve estar associado a um usuario script/generate rspec_model Task titulo:string usuario:references Temos no banco:
  • 20. Rodando os Testes Rodando os Testes Rodando os Testes - rake spec
  • 22. Proporção de Testes em relação ao código - rake stats Temos 77 linhas de testes para 493 linhas de códigos, uma proporção muito pobre de 1:0,2 No site brasigo.com.br trabalham com uma proporção na faixa de 3 linhas de teste para cada linha de código, ou seja 1:3
  • 23. Test::Unit para rSpec class DogTest def test_ bark assert_ algo def setup def teardown describe Dog it “should bark” object.should be _algo before (:each) { } after (:each) { }
  • 24. Vantagens do rSpec em relação ao Test::Unit Linguagem de implementação das especificações é mais natural e flui melhor. O relatório gerado descreve os exemplos criados com mais clareza. A divisão de arquivos e diretório é muito parecida com a divisão natural do Rails entre controllers, models, views, e helpers. Existe uma integração com o AutoTest assim como o Test::Unit.
  • 25. http://dannorth.net/introducing-bdd http://dannorth.net/whats-in-a-story http://blog.improveit.com.br/articles/2008/01/23/rspec-e-textmate http://www.benmabey.com/2008/05/10/slides-and-code-from-my-bddrspec-presentation/ http://www.slideshare.net/rahoulb/telling-stories-with-rspec-presentation http://blog.davidchelimsky.net/2008/6/16/slides- http://www.joesniff.co.uk/ruby/telling-a-good-story-rspec-stories-from-the-trenches.html http://kpumuk.info/category/ruby-on-rails/ http://simplesideias.com.br/usando-o-rspec-para-testar-sua-aplicacao-rails-modelos/#comment-67581 http://rspec.info/documentation/test_unit.html http://www.nabble.com/alias-:calling-:lambda-td12789662.html Referências