SlideShare uma empresa Scribd logo
1 de 25
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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Processo ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Instalando rSpec ,[object Object],[object Object],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 ,[object Object],[object Object]
Aplicação ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object]
Modelo Task ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object]
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 ,[object Object],[object Object]
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 ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Referências

Mais conteúdo relacionado

Mais procurados

Workshop calabash android
Workshop calabash androidWorkshop calabash android
Workshop calabash androidGislaine Melo
 
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...minastestingconference
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoAécio Costa
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 

Mais procurados (7)

Workshop calabash android
Workshop calabash androidWorkshop calabash android
Workshop calabash android
 
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 
Teste Watir
Teste WatirTeste Watir
Teste Watir
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 

Semelhante a Dito Tech Talk RSpec

Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehaveMarcelo Zeferino
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Evoluindo Apps e Serviços com Testes de Contrato
Evoluindo Apps e Serviços com Testes de ContratoEvoluindo Apps e Serviços com Testes de Contrato
Evoluindo Apps e Serviços com Testes de ContratoRafael Portela
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptAndre Baltieri
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppetDaniel Sobral
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Loiane Groner
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistaslucashungaro
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutosLoiane Groner
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 

Semelhante a Dito Tech Talk RSpec (20)

Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Cucumber-QA_Night
Cucumber-QA_NightCucumber-QA_Night
Cucumber-QA_Night
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehave
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Evoluindo Apps e Serviços com Testes de Contrato
Evoluindo Apps e Serviços com Testes de ContratoEvoluindo Apps e Serviços com Testes de Contrato
Evoluindo Apps e Serviços com Testes de Contrato
 
Cucumber
CucumberCucumber
Cucumber
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Aula Ruby
Aula RubyAula Ruby
Aula Ruby
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistas
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutos
 
Python e Django
Python e DjangoPython e Django
Python e Django
 

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.
  • 6.
  • 7.
  • 8.
  • 9.
  • 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.
  • 15.
  • 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.
  • 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.
  • 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.
  • 25.