Upload
vanderson-silva
View
2.346
Download
2
Embed Size (px)
DESCRIPTION
Treinamento da ferramenta de automação de testes de software Demoiselle Behave (http://demoiselle.github.io/behave/). Parte 1: Apresenta conceitos essenciais do BDD e da ferramenta DBehave, além de propor um exercício prático de uso com foco em construção de histórias.
Citation preview
Treinamento:Treinamento:
AutomaçãoAutomaçãode Testesde Testes
Módulo 01 - HistóriasMódulo 01 - Histórias
Módulo 1 – Histórias 2
IntroduçãoIntrodução Demoiselle BehaveDemoiselle Behave
O que é? É um framework de integração para técnicas de Desenvolvimento
Orientadas a Comportamento – Behaviour Driven Development (BDD). É mais que uma ferramenta BDD:
Abstração para ferramentas de BDD; Abstração para ferramentas de automação de testes; Abstração para ferramentas de gestão de testes.
É um subprojeto do Framework Demoiselle: (http://www.frameworkdemoiselle.gov.br/).
Módulo 1 – Histórias 3
Visão GeralVisão Geral
6) acessar sistema
5) selecionar motor de execução
1) iniciar teste
3) ler histórias
4) ler mapeamentos de tela
7) registrar resultados
2) selecionar motor BDD
Alvo doAlvo doMódulo 1Módulo 1
Módulo 1 – Histórias 4
IntroduçãoIntrodução BDD - Behaviour Driven DevelopmentBDD - Behaviour Driven Development
Processo de desenvolvimento de software criado por Dan North que combina técnicas e princípios do Test Driver Development – TDD.
Problemas encontrados no TDD: Onde começa o processo? O que testar e o que não testar? O que chamamos de teste? Como analisar falhas?
Módulo 1 – Histórias 5
IntroduçãoIntrodução BDDBDD
Essência: Repensar a abordagem de testes unitários e de aceitação:
Testes unitários iniciados com o prefixo should. Testes de aceitação escritos como histórias de usuários.
Como um [papel] Eu quero [recurso], para que [benefícios]
Dado [contexto inicial], quando [evento ocorre], então [garantir alguns resultados]
Os critérios de aceitação escritos como cenários:
Módulo 1 – Histórias 6
IntroduçãoIntrodução BDDBDD
A partir destes princípios, North propos um framework BDD para um ambiente de colaboração entre desenvolvedores e outros papéis não técnicos, de um projeto de software.
Durante o “Agile specifications, BDD and Testing eXchange” em 2009 Dan North definiu:
BDD is a second-generation, outside-in, pull-based, BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery with well-defined outputs, resulting in the delivery of working, tested software that matters.of working, tested software that matters.
Módulo 1 – Histórias 7
IntroduçãoIntrodução BDDBDD
Second Generation Processo ágil que auxilia o time a entregar software de alta qualidade,
respondendo questões até então em aberto pelos processos ágeis iniciais, tais como documentação e testes.
Outside-in and pull-based Permite que o software seja construído com foco nos resultados
esperados do sistema, assegurando que estes resultados sejam alcançados.
Possível pela colaboração das especificações de forma ilustrativa. As histórias são criadas apenas quando necessárias.
Módulo 1 – Histórias 8
IntroduçãoIntrodução BDDBDD
Multiple-stakeholder BDD ajuda a eliminar a ideia de um usuário “sem forma” reconhecendo
que diferentes grupos de pessoas serão afetadas com o software de diferentes maneiras.
Na Gestão de Qualidade de Software, Gerald Weinberg escreveu: "Qualidade é um valor para uma pessoa”.
BDD permite entender e definir a qualidade, especificando para quais pessoas o software trará algum valor e quão necessário será para elas.
Agile BDD funciona melhor com iterações curtas de trabalho, onde o time
especifica, implementa e entrega pequenas partes do software. Requer equipes multifuncionais para colaborar com as especificações e
testes.
Módulo 1 – Histórias 9
IntroduçãoIntrodução
BDDBDD High-automation
Quando a qualidade da solução é definida, o time precisa verificar as funcionalidades do sistema com frequência, comparando-as com os resultados esperados.
Para fazer esta verificação eficaz, ele tem de ser automatizado. BDD depende fortemente de automação e especificações executáveis. A automação da definição BDD no nível mais alto é feita com uso de
ferramentas como o JBehave.
Módulo 1 – Histórias 10
IntroduçãoIntrodução Especificação de ComportamentoEspecificação de Comportamento
Um dos grandes riscos na construção de um software é não entender exatamente o que ele deve fazer.
Uma alternativa para reduzir essa dificuldade é fazer uso de exemplos concretos para ilustrar o que se deseja do software.
Cenários de uso são mais eficientes na comunicação do que descrições, por mais detalhadas que sejam.
Utilizar exemplos reais para descrever o comportamento desejado de um sistema, nos mantém conectados com a visão dos nossos stakeholders.
Módulo 1 – Histórias 11
IntroduçãoIntrodução Especificação de ComportamentoEspecificação de Comportamento
Quando nos comunicamos usando cenários de uso reais conseguimos fazer que nossos clientes “visualizem” a solução em uso.
Dessa forma, conseguimos obter feedbacks úteis e, até algumas boas ideias, antes de escrever qualquer linha de código.
Módulo 1 – Histórias 12
IntroduçãoIntrodução Linguagem GherkinLinguagem Gherkin
É uma “Business Readable Domain Specific Language (DSL)”. Uma linguagem simples para especificação de domínio de negócio.
É uma linguagem semiformal para construção de testes que avaliam o comportamento da aplicação.
Permite a colaboração de múltiplos atores para a especificação do software.
“That said, I do think that the greatest potential benefit of DSLs comes when business people participate
directly in the writing of the DSL code” Martin Fowler
“That said, I do think that the greatest potential benefit of DSLs comes when business people participate
directly in the writing of the DSL code” Martin Fowler
Módulo 1 – Histórias 13
IntroduçãoIntrodução
Especificação FormalEspecificação Formal Especificação FormalEspecificação Formal
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a tela "Tela de Login"Quando informo "joao" no campo "Usuário"E informo "123" no campo "Campo Senha"Quando clico em "Entrar"Então estou autenticado
Especificação TestávelEspecificação Testável
transcrição
WebDriver driver = new FirefoxDriver();driver.get("http://localhost:8080/treino/");WebElement login = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'text')])"));login.clear();login.sendKeys("joao");WebElement senha = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'password')])"));senha.sendKeys("123");WebElement botaoOk = driver.findElement(By.xpath("(//button[contains(@type, 'submit')])"));botaoOk.click();
Linguagem de ProgramaçãoLinguagem de Programação
transcrição
Módulo 1 – Histórias 14
IntroduçãoIntrodução
WebDriver driver = new FirefoxDriver();driver.get("http://localhost:8080/treino/");WebElement login = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'text')])"));login.click();login.clear();login.sendKeys("joao");WebElement senha = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'password')])"));senha.clear();senha.sendKeys("123");WebElement botaoOk = driver.findElement(By.xpath("(//button[contains(@type, 'submit')])"));botaoOk.click();
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a tela "Tela de Login"Quando informo "joao" no campo "Usuário"E informo "123" no campo "Campo Senha"Quando clico em "Entrar"Então estou autenticado
BenefíciosBenefícios
CustoCustoManutençãoManutenção
AprendizagemAprendizagem
ProdutividadeProdutividade
Módulo 1 – Histórias 15
IntroduçãoIntrodução
WebDriver driver = new FirefoxDriver();driver.get("http://localhost:8080/treino/");WebElement login = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'text')])"));login.click();login.clear();login.sendKeys("joao");WebElement senha = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'password')])"));senha.clear();senha.sendKeys("123");WebElement botaoOk = driver.findElement(By.xpath("(//button[contains(@type, 'submit')])"));botaoOk.click();
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a tela "Tela de Login"Quando informo "joao" no campo "Usuário"E informo "123" no campo "Campo Senha"Quando clico em "Entrar"Então estou autenticado
BenefíciosBenefícios
ColaboraçãoColaboração
Módulo 1 – Histórias 16
IntroduçãoIntrodução Linguagem EstruturaLinguagem Estrutura
Dado: Descreve uma situação
“Dado que um cliente desistiu da compra” Quando:
Descreve uma certa ação “Quando solicito a exclusão de um produto”
Então: Descreve os resultados esperados
“Então o sistema apresentará uma mensagem de erro” E:
Repete o último termo “Então a lista de usuários é apresentada” “E uma mensagem é apresentada”
Módulo 1 – Histórias 17
IntroduçãoIntrodução Arquitetura dbehaveArquitetura dbehave
Core
Parser Runner Integration
TECNOLOGIAS
JBehave
Concordion
Cucumber
TECNOLOGIAS
Selenium
FEST
TECNOLOGIAS
ALM - RQM
Módulo 1 – Histórias 18
IntroduçãoIntrodução Arquitetura dbehaveArquitetura dbehave
Parser Camada responsável pelo carregamento das histórias. Usa como implementação de referência a linguagem Gherkin e o
framework Jbehave. Pode ser extensível para outras linguagens. Fornece o recurso para Reuso de Histórias.
Parser
TECNOLOGIAS
JBehave
Concordion
Cucumber
Módulo 1 – Histórias 19
IntroduçãoIntrodução Arquitetura dbehaveArquitetura dbehave
Parser – Reuso de Histórias
Funcionalidade: Acesso ao SistemaComo um: operador do sistemaEu quero: ser autenticado por meio de senhaDe modo que: o acesso ao sistema seja dado apenas aos operadoresCadastrados
Cenário: Acessar o sistema com o usuário "{usuário}" e senha "{senha}"Dado que vou para a tela "Tela de Login"Quando informo "{usuário}" no campo "Campo Usuário"E informo "{senha}" no campo "Campo Senha"Quando clico em "Entrar"Então será exibido "Seja bem vindo"
Cenário: Acessar o Sistema XPTOAcessar o sistema com o usuário "06762344887" e senha "188542"
Módulo 1 – Histórias 20
Exercício 1Exercício 1 ObjetivosObjetivos
Construir uma solução de Controle de Estoque utilizando a técnica de BDD.
Criar as histórias do sistema utilizando os termos: Dado, Quando e Então.
Criar um projeto utilizando os modelos de projeto do Demoiselle Behave.
Entender a técnica de reuso de cenários.
Módulo 1 – Histórias 21
Exercício 1Exercício 1 Configuração do seu AmbienteConfiguração do seu Ambiente
Espera-se que o ambiente de treinamento contenha os seguintes softwares instalados:
Software Versão Objetivo Site
Compilador Java (JDK)
1.6 ou superior
Compilação dos projetos http://www.oracle.com/technetwork/java/javase/downloads/index.html
Eclipse IDE for Java EE Developers
Luna IDE para desenvolvimento dos projetos
https://www.eclipse.org/downloads/packages/eclipse-standard-432/keplersr2
JBehave Eclipse Plugin
1.0.0.20140605-0717
Integração com projetos Maven
http://jbehave.org/eclipse-integration.html
Navegador Firefox 17 ou superior
Navegador padrão para os exercícios
https://www.mozilla.org/pt-BR/firefox/
Navegador Google Chrome
33 ou superior
Navegador para o exercício do módulo 2
http://www.google.com/intl/pt-BR/chrome/browser/
Módulo 1 – Histórias 22
Exercício 1Exercício 1 Dúvidas?Dúvidas?
Caso encontre algum problema ou dificuldade durante seu treinamento abra uma questão no GitHub:
https://github.com/demoiselle/behave/issues
Agradecemos seu feedback!Agradecemos seu feedback!
Módulo 1 – Histórias 23
Exercício 1Exercício 1 Material para DownloadMaterial para Download
http://sourceforge.net/projects/demoiselle/files/tools/behave/
Arquivo com os trechosde código para realizaçãodos exercícios
Aplicação de treinamentopara realizar os testessugeridos pelos exercícios
Módulo 1 – Histórias 24
Exercício 1Exercício 1 Configuração dos Arquétipos do DemoiselleConfiguração dos Arquétipos do Demoiselle
Abra o eclipse. Acione o menu:
Window → Preferences → Maven → Archetypes Botão: “Add Remote Catalog...” Informe na tela com o título “Remote Archetype Catalog”:
Catalog File: http://demoiselle.sourceforge.net/repository/archetype-catalog.xml
Description: Demoiselle Behave Confirme e feche as janelas de preferências do Window
Módulo 1 – Histórias 25
Exercício 1Exercício 1 Configuração dos Snippets do TreinamentoConfiguração dos Snippets do Treinamento
Os snippets são estruturas de texto pré-definidas utilizadas para agilizar a implementação de alguns trechos de código ao longo de todos os laboratórios.
Módulo 1 – Histórias 26
Exercício 1Exercício 1 Configuração dos Snippets do TreinamentoConfiguração dos Snippets do Treinamento
Abra a janela de Snippets por meio do menu: Window → Show View → Other... → General → Snippets:
Clique com o botão direito sobre o Snippet, selecione o menu “Customize...”. Na sequencia clique no botão Import e importe o arquivo snippets-exercicios.xml, localizado no material do treinamento.
Módulo 1 – Histórias 27
Exercício 1Exercício 1 Configuração Plugin JBehaveConfiguração Plugin JBehave
Para que os arquivos de histórias tenham o recurso de autocompletar configure o plugin do JBehave:
Menu: Window → Preferences → JBehave → Project Settings Altere a língua para português: pt
Módulo 1 – Histórias 28
HistóriasHistórias Criando Projeto 01Criando Projeto 01
Menu: File : New : Maven Project; Vá para a próxima tela (next); Selecione o Catálogo: Demoiselle Behave.
Módulo 1 – Histórias 29
HistóriasHistórias Criando Projeto 01Criando Projeto 01
Selecione a última versão do jbehave-junit-archetype:
Módulo 1 – Histórias 30
HistóriasHistórias Criando Projeto 01Criando Projeto 01
Informe o Group Id: br.gov.serpro.behave; Informe o Artifact Id: projeto01; Clique em Finish.
Módulo 1 – Histórias 31
HistóriasHistórias Criando Projeto 01Criando Projeto 01
A pasta stories contém os arquivos de histórias BDD do seu projeto.
Recomenda-se criar uma estrutura de subpastas para organizar os arquivos de histórias, conforme as necessidades do projeto.
Módulo 1 – Histórias 32
Exercício 1Exercício 1 Criação da Classe EstoqueCriação da Classe Estoque
No pacote “br.gov.serpro.behave.projeto01” da pasta “src/main/java”, crie uma classe Java chamada “Produto”;
Substitua o conteúdo da classe “Produto” pelo snippet “01 Classe Produto”;
Crie uma classe Java chamada “Estoque”; Substitua o conteúdo da classe “Estoque” pelo snippet “02
Classe Estoque”.
Módulo 1 – Histórias 33
Exercício 1Exercício 1 Classe ProdutoClasse Produto
public class Produto implements Comparable<Produto> {
private String nome;private int quantidade;
...
@Overridepublic int compareTo(Produto produto) {
return nome.compareTo(produto.getNome());}
}
Atributos
Necessário paraordenação
Módulo 1 – Histórias 34
Exercício 1Exercício 1 Classe EstoqueClasse Estoque
public class Estoque {
public static Estoque conectar() { }public void submeter() { }public void funcao(String funcao) { }private void buscarProduto(String nome) {}private void adicionarEstoque(Produto produto) { }private void removerEstoque(Produto produto) { }private ArrayList<Produto> listarEstoque() { }private void adicionarProduto(Produto produto) { }public void limparEstoque() { }public String ultimaMensagem() { }
}Obtém a última
mensagem do sistema
Obtém referência aoobjeto estoque
Remove todos osprodutos do estoque
Adiciona um produtoao estoque
Remove itens do estoque
Adiciona itensno estoque
Busca um produtodo estoque pelo nome
Executa a ação selecionada
Lista todos osprodutos do estoque
Seleciona uma ação
Módulo 1 – Histórias 35
Exercício 1Exercício 1 Pasta de HistóriasPasta de Histórias
Crie uma pasta chamada estoque dentro da pasta src/test/resources
Dentro desta pasta crie o arquivo de histórias produto-inclusao.story
Aplique o snippet 03 história Inclusão de Produtos ao arquivo criado
Módulo 1 – Histórias 36
Exercício 1Exercício 1 Histórias: Inclusão de ProdutosHistórias: Inclusão de Produtos
Funcionalidade: Inclusão de Produtos
Eu quero: Incluir Produtos no Controle de EstoqueDe modo que: Os produtos sejam armazenados do Controle de Estoque
Cenário: Adicionar um produto
Dado que a lista de produtos está vaziaQuando aciono a função "Incluir Produto"Quando informo o nome "computador"Quando informo a quantidade "300"Quando submeto o formulárioEntão o sistema apresentará a mensagem "Produto Incluído"
Cenário
Funcionalidade
Descrição
Passos
Módulo 1 – Histórias 37
Exercício 1Exercício 1 Classe EstoqueTest.javaClasse EstoqueTest.java
Na pasta src/test/java, no pacote br.gov.serpro.behave.projeto01 crie uma classe chamada EstoqueTest
Substitua seu conteúdo pelo snippet 04 EstoqueTest.java
public class EstoqueTest {
private BehaveContext eng = null;
public EstoqueTest() {eng = BehaveContext.getInstance();
}
@Testpublic void testAllStories() throws Throwable {
eng.run("/estoque");}
}
Obtém o contextodo dbehave
Informa ao contextoas pastas ou arquivos de
histórias que serão executados
Módulo 1 – Histórias 38
Exercício 1Exercício 1 Execução da Classe EstoqueTest.javaExecução da Classe EstoqueTest.java
Execute a classe EstoqueTest por meio do JUnit
Módulo 1 – Histórias 39
Exercício 1Exercício 1 Execução da Classe EstoqueTest.javaExecução da Classe EstoqueTest.java
Observer o log de saída:
Passos pendentesPassos pendentes
Módulo 1 – Histórias 40
Exercício 1Exercício 1 Execução da Classe EstoqueTest.javaExecução da Classe EstoqueTest.java
Execute a classe EstoqueTest no JUnit e verifique o log de saída:
Recomendações
Módulo 1 – Histórias 41
Exercício 1Exercício 1 Criando classe de passosCriando classe de passos
No pacote br.gov.serpro.behave.projeto01 da pasta src/test/java crie uma classe chamada EstoquePassos
Substitua o conteúdo da classe pelo snippet 05 EstoquePassos.java
Módulo 1 – Histórias 42
Exercício 1Exercício 1
public class EstoquePassos implements Step {
Estoque estoque = Estoque.conectar();
@Given("a lista de produtos está vazia")public void givenAListaDeProdutosEstáVazia() {
estoque.limparEstoque();}
@When("informo o nome \"$nome\"")public void whenInformoONomecomputador(String nome) {
estoque.informarNome(nome);}
@Then("o sistema apresentará a mensagem \"$mensagem\"")public void thenOSistemaApresentara(String mensagem) {
Assert.assertEquals(mensagem, estoque.getMensagem());}
}
Parâmetros
Asserções doJUnit
Uso de parâmetros
Abrindo conexãocom o Estoque
Dado... uma situação
Quando... acesso a recursos
Então... consequênciasesperadas
Módulo 1 – Histórias 43
Exercício 1Exercício 1 Inclusão dos Passos CustomizadosInclusão dos Passos Customizados
No método testAllStories da classe EstoqueTest inclua no contexto do DBehave um objeto EstoquePassos:
@Testpublic void testAllStories() throws Throwable {
eng.addSteps(new EstoquePassos());eng.run("/estoque");
}
Módulo 1 – Histórias 44
Exercício 1Exercício 1 Execução da Classe EstoqueTest.javaExecução da Classe EstoqueTest.java
Execute a classe EstoqueTest no JUnit e verifique o log de saída:
Erro
Ações executadascom sucesso
Falha
Ações executadascom sucesso
Ações executadascom sucesso
Módulo 1 – Histórias 45
Exercício 1Exercício 1 Reuso de HistóriasReuso de Histórias
Aplique o snippet 09 histórias reutilizadas ao final do arquivo produto-inclusao.story
Cenário: Adicionar produto "{nome}" com "{quantidade}" unidades
Quando aciono a função "Incluir Produto"Quando informo o nome "{nome}"Quando informo a quantidade "{quantidade}"Quando submeto o formulárioEntão o sistema apresentará a mensagem "Produto Incluído"
Cenário: Adicionar vários ProdutosDado que a lista de produtos está vaziaAdicionar produto "mesa" com "20" unidadesAdicionar produto "cadeira" com "30" unidadesAdicionar produto "computador" com "100" unidadesEntão o estoque terá "3" produtos cadastrados
ParâmetrosParâmetros
Chamada ao cenário
Chamada ao cenário
Chamadasao cenário
Módulo 1 – Histórias 46
Exercício 1Exercício 1 Desenvolvimento Orientado a ComportamentoDesenvolvimento Orientado a Comportamento
Implementaremos os métodos da classe Estoque em função das falhas apresentadas pelo teste:
No método adicionarProduto aplique o snippet 06 adicionarProduto Modifique o método limparEstoque:
public void limparEstoque() {lista.clear();
}
Módulo 1 – Histórias 47
Exercício 1Exercício 1 Mais históriasMais histórias
Crie um novo arquivo na pasta src/test/resources/estoque com o nome produto-pesquisa.story
Aplique o snippet 07 histórias Busca de Produtos Rode os testes e verifique os erros.
Falha
Módulo 1 – Histórias 48
Exercício 1Exercício 1 Desenvolvimento Orientado a ComportamentoDesenvolvimento Orientado a Comportamento
Implemente o método buscarProduto da classe Estoque com o snippet 08 buscarProduto:
Rode novamente seu testes. Neste momento não haverá mais erros.
Módulo 1 – Histórias 49
Exercício 1Exercício 1 Controle de EstoqueControle de Estoque
Crie um novo arquivo na pasta src/test/resources/estoque com o nome estoque-controle.story
Aplique o 10 histórias Controlar Estoque Rode os testes e verifique os resultados:
Falha
Módulo 1 – Histórias 50
Exercício 1Exercício 1 Desenvolvimento Orientado a ComportamentoDesenvolvimento Orientado a Comportamento
Implemente os seguintes métodos da classe Estoque: adicionarEstoque
Snippet: 11 método adicionarEstoque removerEstoque
Snippet: 12 método removerEstoque listarEstoque
Snippet: 13 método listarEstoque Execute novamente os testes. Observer que as falhas foram removidas.
Módulo 1 – Histórias 51
Exercício 1Exercício 1 Exercício ComplementarExercício Complementar
A partir da técnica BDD crie a funcionalidade “Remover Produto”
Crie as respectivas histórias e passos; Rode as histórias, mesmo com erro; Implemente as evoluções da classe Estoque em função dos resultados.
Implemente a funcionalidade “raiz quadrada” da Calculadora (Calc.java)
Módulo 1 – Histórias 52
ConfiguraçõesConfigurações behave.propertiesbehave.properties
Todas as configurações do DBehave são registradas no arquivo behave.properties
Vamos apresentar a cada módulo as configurações mais relevantes:
behave.parser.language=pt
behave.parser.story.extension.original=story
behave.parser.story.extension.converted=storyConverted
behave.parser.commonssteps.enabled=true
Configura a línguaPadrão das histórias Extensão dos
arquivosde histórias
Extensão dos arquivosde histórias convertidos
Habilita os passoscomuns do DBehave
Módulo 1 – Histórias 53
ConfiguraçõesConfigurações behave.propertiesbehave.properties
Ordem de Carregamento Propriedades da JVM (System do Java) behave.properties do projeto behave.properties do framework
Portanto, de forma estática todas as propriedades podem ser sobrescritas no behave.propeties do projeto.
Dinamicamente é possível modificar todas as propriedades do DBehave por meio da classe System ou passando os parâmetros na inicialização da JVM
System.setProperty("behave.parser.commonssteps.enabled", "false");
-Dbehave.parser.commonssteps.enabled=false
Módulo 1 – Histórias 54
Conclusão do MóduloConclusão do Módulo ResumoResumo
Especifique sistemas por histórias! O Demoiselle Behave é um framework de integração para
testes em BDD. A camada Parser do DBehave é responsável pelo carremento
das histórias. A criação de projetos do DBehave pode ser feita com a
utilização de modelos de projeto Maven. O modelo jbehave-junit-archetype cria projetos para testes
apenas com JUnit sem camadas de apresentação.
Módulo 1 – Histórias 55
ReferênciasReferências
Conceitos do BDD: http://pt.wikipedia.org/wiki/Behavior_Driven_Development
Princípios do BDD: http://cuke4ninja.com/sec_cucumber_bdd.html
DSLs: http://martinfowler.com/bliki/BusinessReadableDSL.html
BDD na Prática: http://elemarjr.net/2012/04/12/bdd-na-prtica-parte-3-gherkin/