DESENVOLVIMENTO BASEADO EM TESTES - BDD CUCUMBER

Tipo de documento:Redação

Área de estudo:Lingua Portuguesa

Documento 1

” David Chemlimsky Behaviour Driven Development Uma abordagem no estilo TDD Documentação executável Melhora a comunicação dos times Esclarece os mal-entendimentos entre clientes, especialistas de domínio, desenvolvedores Pode ser utilizada por todos os envolvidos no projeto @dudumendes BDD Princípios Enough is enough Deliver stakeholder value It’s all behaviour BDD @dudumendes Princípios O bastante é o bastante Trabalhar para alcançar as expectativas dos stakeholders, mas evitar fazer mais do que se é necessário fazer Entregar valor ao stakeholder Se você está fazendo algo que não entrega valor ou não aumenta sua habilidade de entrega de valor, pare e faça outra coisa Tudo é sobre comportamento Assim como podemos descrever o comportamento a partir da perspectivas dos stakeholders, também podemos descrever o comportamento de um código a partir de outro código que o utiliza @dudumendes red Ciclo do BDD red refactor refactor green Passo Cenário green @dudumendes BDD O Ciclo Stakeholder e analista discutem os requisitos os requisitos são organizados em funcionalidades (features) podem ser quebradas em estórias fazem sentido para o stakeholder @dudumendes BDD O Ciclo Stakeholder, analista e testador determinam os escopos das estórias o analista pensa na funcionalidade de forma geral o testador pensa em cenários concretos, com valores de entradas e saída @dudumendes BDD O Ciclo Cenários prioritários são identificados Stakeholder especifica exatamente o que quer entregue Desenvolvedores implementam o bastante para satisfazer os cenários e nada mais @dudumendes BDD O Ciclo Desenvolvedores Automatizam cenários que orientam o desenvolvimento Descrevem comportamentos esperados Implementam os comportamentos Refatoram @dudumendes Processo do BDD @dudumendes Estórias no BDD BDD Estórias e Comportamento Estórias Correspondem às Estórias de Usuário Expressam o comportamento das explicações em alto nível Necessidade de frameworks de estórias Cucumber, JBehave BDD Estórias e Comportamento Comportamento (ou Spec) Correspondem às expectativas em nível de classe Expressam o comportamento a nível de serviço/ componente Estórias e Comportamento Estórias de Usuário Formado por um conjunto de Cenários (Scenarios) critérios de aceitação Cada cenários possui “entradas”, eventos e “resultados” Utilizados em projetos ágeis Behaviour Expressado como métodos de testes Define o que aplicação deve e não deve fazer Estrutura de uma estória Connextra Format Título Narrativa As a [algum_papel] I want [alguma_necessidade] So that [beneficio/valor_da_caracteristica] Critérios de aceitação (cenários) Given [alguma(s)_condicao(oes)] When [evento_ocorrer] Then [certifico_algum_resultado] Estrutura de uma estória Título Narrativa Como um [algum_papel] Eu quero [alguma_necessidade] Para que [beneficio/valor_da_caracteristica] Critérios de aceitação (cenários) Dado [alguma(s)_condicao(oes)_entrada] Quando [evento_ocorrer] Então [certifico_algum_resultado] red Ciclo do BDD red refactor refactor gre Passo Cenário gre @dudumendes Cucumber Cucumber Framework BDD Open Source baseado em RSpec Criado por Aslak Hellesøy Versão atual 1.

Cucumber Características Implementação em Ruby Estórias de usuário baseadas em textos Suporte a Injeção de dependências Cucumber em 03 passos Escrever uma estória e executar a estória (. feature) obter os snippets com os passos do teste Criar o arquivos de passos a partir dos snippets Dar implementação aos passos @dudumendes Cucumber em 03 passos Passo 1 - Escrever uma estória Estrutura de uma estória Narrativa As a [algum_papel] I want [alguma_necessidade] So that [beneficio/valor_da_caracteristica] Cenário Given [alguma(s)_condicao(oes)] When [evento_ocorrer] Then [certifico_algum_resultado] Estrutura de uma estória Narrative: In order to [beneficio/valor_da_caracteristica] As a [algum_papel] I want to [alguma_necessidade] Scenario: Nome do Cenário Given [alguma(s)_condicao(oes)] When [evento_ocorrer] Then [certifico_algum_resultado] @dudumendes Estórias no Cucumber arquivos de texto com extensão “.

feature” localização diretório features o comando procura por um diretório “features” execução comando cucumber busca o diretório Cucumber em 03 passos Passo 1 - Escrever uma estória Feature: greeter says hello In order to test Cucumber As a developer I want a greeter to say hello Scenario: greeter says hello Given a greeter When I send it the greet message Then I should see "Hello Cucumber" gretter_say_hello. feature @dudumendes cucumber @dudumendes continuação: snippets @dudumendes Resultado O cucumber encontrou a feature tentou executá-la mas não sabe como executá-la O cucumber sugeriu algumas dicas do código @dudumendes Cucumber em 03 passos Passo 2 - Criar o arquivo de passos @dudumendes Estórias no Cucumber arquivos em Ruby com sufixo “_steps” localização features/step_definitions execução comando cucumber @dudumendes greeter_steps.

to eql greeting end @dudumendes Cucumber Passos Escrever uma estória Arquivo de texto de extensão. feature Recuperar os snippets Criar o arquivo de passos Estórias no Cucumber Estórias em arquivos de textos 01 Narrativa (Narrative) * Cenários (Scenarios) Narrativa Opcional As a, In order to, I want to Cenários no Cucumber Cenários consistem em: Título Passos: Given, When, Then And é possível colocar then antes do when Cenários podem depender de outros Comentários (!-- ) @dudumendes Gherkin Feature: Scenario: Given When Then Internacionalização Inglês é o padrão # language: pt Features Step definitions Aplicação @dudumendes Gherkin Feature Then Scenario And Scenario Outline But Scenarios | Given “” When # @dudumendes Gherkin --i18n cucumber --i18n pt @dudumendes Exercício Criar uma versão em português para o Hello World Esquema de Cenários Scenario Outline É comum em testes de aceitação definir-se exemplos de cenários reais com valores para verificar o estado de pronto da aplicação Neste caso é possível se utilizar esquemas de cenários Esquemas de cenários Nos cenários os parâmetros devem ser envolvidos com sinais “<” e “>” Eles devem ser declarados como esquemas de cenários Após um cenário informam-se os valores válidos para os parâmetros em um tabela determinada por “Cenários:” @dudumendes # language: pt Funcionalidade: Depositar Dinheiro Esquema do Cenário: Depositar Dinheiro Dado um cliente especial com saldo atual de <saldo_inicial> reais Quando ele realizar um deposito no valor <deposito> reais Então o deposito deve ser realizado E o saldo da conta atualizado para <saldo_final> reais Cenarios: valores | saldo_inicial | | 200 | 100 | 300 | 200 | 100 | 300 | 200 | 100 | 300 | 200 | 100 | 300 possiveis deposito | saldo_final | | | | | @dudumendes O comando cucumber @dudumendes Organizando features Comando cucumber sem opções serão procurados todos os arquivos.

rb e. feature abaixo do diretório features gera snippets para features indefinidas cada Cenário e Passo tem comentários no final da linha localização do cenário nome do arquivo e número da linha @dudumendes # language: pt Funcionalidade: Futuro hospede reserva um quarto A fim de proporcionar mais comodidade Como dono do hotel Eu gostaria que os futuros hospedes reservassem quartos pela internet Cenario: Reserva com sucesso Dado um hotel com "10" quartos e "0" reservas @dudumendes Organizando features @dudumendes Organizando features Comando cucumber sem opções serão procurados todos os arquivos. rb e. existe$/ do |nome| #. end Dado /^que eu informei o login "(. do |nome| #. end Dado /^que (. está logado$/ do |nome| step "que o usuario #{nome} existe" step "que eu informei o login #{nome}" end @dudumendes Funcionalidade: Transferir Dinheiro Cenário: Transferir Dinheiro Quando eu seleciono "conta corrente" como conta de origem E eu seleciono "poupanca" como conta de destino E eu informo que a quantidade é 20 E solicito executar Quando /^eu seleciono "(.

feature Funcionalidade: Descrições Como um frequentador de cinema Eu quero ver horarios precisos e concisos Para que eu possa encontrar filmes que se encaixem no meu horario Cenário: Exibir minutos para horarios que não terminam em 00 Dado um filme Quando eu configuro o horario para "2012-10-10" às "2:15pm" Então o horario deve ser "October 10, 2012 2:15pm" @dudumendes snippet @dudumendes features/step_definitions/horario_steps. rb # encoding: utf-8 # language: pt Dado /^um filme$/ do @filme = Filme. create! end Quando /^eu configuro o horario para "(. às "(. do |data, hora| @filme. downcase end end @dudumendes @dudumendes Validando o modelo @dudumendes rails generate model Email de:text para:text mensagem:text @dudumendes require 'spec_helper' describe Email do pending "add some examples to (or delete) #{__FILE__}" end @dudumendes require 'spec_helper' describe Email do context "validações:" do it "para é obrigatório" it "para é válido com email válido" it "para é inválido com email inválido" it "mensagem é obrigatória" end end @dudumendes require 'spec_helper' @dudumendes describe Email do context "validações:" do it "para é obrigatório" do email = Email.

create expect(email). to have(1). error_on(:para) end it "para é válido com email válido" it "para é inválido com email inválido" it "mensagem é obrigatória" end end @dudumendes @dudumendes app/models/email. rb class Email < ActiveRecord::Base attr_accessible :mensagem, :para end @dudumendes app/models/email. error_on(:para) end it "para é válido com email válido" do email = Email. create(:para => "para@email. com") expect(email). to have(:no). error_on(:para) end it "para é inválido com email inválido" it "mensagem é obrigatória" end end @dudumendes require 'spec_helper' describe Email do context "validações:" do it "para é obrigatório" do email = Email. a-z]{2,})\z/i, :allow_blank => true end describe Email do context "validações:" do it "para é obrigatório" do email = Email.

create expect(email). to have(1). error_on(:para) end it "para é válido com email válido" do email = Email. create(:para => "para@email. org/. CHELIMSKY, David. The RSpec Book. PragBook, 2011. JBEHAVE.

807 R$ para obter acesso e baixar trabalho pronto

Apenas no StudyBank

Modelo original

Para download