O documento apresenta uma introdução ao Behavior Driven Development (BDD) e à ferramenta Demoiselle Behave. Explica os conceitos fundamentais do BDD como a escrita de histórias de usuário e cenários em linguagem Gherkin. Também descreve a arquitetura e funcionalidades do Demoiselle Behave, como o parser de histórias e reuso de cenários.
2. 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/).
3. 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 do
Módulo 1Módulo 1
4. 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?
5. 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:
6. 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 interactionsagile methodology. It describes a cycle of interactions
with well-defined outputs, resulting in the deliverywith well-defined outputs, resulting in the delivery
of working, tested software that matters.of working, tested software that matters.
7. 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.
8. 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.
9. 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.
10. 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.
11. 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.
12. 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
13. 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[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@type, 'submit')])"));
botaoOk.click();
Linguagem de ProgramaçãoLinguagem de Programação
transcrição
14. 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[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.click();
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.clear();
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@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
CustoCusto
ManutençãoManutenção
AprendizagemAprendizagem
ProdutividadeProdutividade
15. 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[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.click();
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.clear();
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@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
16. 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”
18. 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
19. Módulo 1 – Histórias 19
IntroduçãoIntrodução
Arquitetura dbehaveArquitetura dbehave
Parser – Reuso de Histórias
Funcionalidade: Acesso ao Sistema
Como um: operador do sistema
Eu quero: ser autenticado por meio de senha
De modo que: o acesso ao sistema seja dado apenas aos operadores
Cadastrados
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 XPTO
Acessar o sistema com o usuário "06762344887" e senha "188542"
20. 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.
21. 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/e
clipse-standard-432/keplersr2
JBehave Eclipse
Plugin
1.0.0.201
40605-
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/
22. 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!
23. 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 trechos
de código para realização
dos exercícios
Aplicação de treinamento
para realizar os testes
sugeridos pelos exercícios
24. 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
25. 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.
26. 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.
27. 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
28. 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.
29. Módulo 1 – Histórias 29
HistóriasHistórias
Criando Projeto 01Criando Projeto 01
Selecione a última versão do jbehave-junit-archetype:
30. 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.
31. 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.
32. 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”.
33. 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;
...
@Override
public int compareTo(Produto produto) {
return nome.compareTo(produto.getNome());
}
}
Atributos
Necessário para
ordenação
34. 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 ao
objeto estoque
Remove todos os
produtos do estoque
Adiciona um produto
ao estoque
Remove itens
do estoque
Adiciona itens
no estoque
Busca um produto
do estoque pelo nome
Executa a ação
selecionada
Lista todos os
produtos do estoque
Seleciona
uma ação
35. 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
36. 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 Estoque
De modo que: Os produtos sejam armazenados do Controle de Estoque
Cenário: Adicionar um produto
Dado que a lista de produtos está vazia
Quando aciono a função "Incluir Produto"
Quando informo o nome "computador"
Quando informo a quantidade "300"
Quando submeto o formulário
Então o sistema apresentará a mensagem "Produto Incluído"
Cenário
Funcionalidade
Descrição
Passos
37. 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();
}
@Test
public void testAllStories() throws Throwable {
eng.run("/estoque");
}
}
Obtém o contexto
do dbehave
Informa ao contexto
as pastas ou arquivos de
histórias que serão
executados
38. 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
39. 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
40. 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
41. 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
42. 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 do
JUnit
Uso de parâmetros
Abrindo conexão
com o Estoque
Dado... uma situação
Quando... acesso
a recursos
Então... consequências
esperadas
43. 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:
@Test
public void testAllStories() throws Throwable {
eng.addSteps(new EstoquePassos());
eng.run("/estoque");
}
44. 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 executadas
com sucesso
Falha
Ações executadas
com sucesso
Ações executadas
com sucesso
45. 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ário
Então o sistema apresentará a mensagem "Produto Incluído"
Cenário: Adicionar vários Produtos
Dado que a lista de produtos está vazia
Adicionar produto "mesa" com "20" unidades
Adicionar produto "cadeira" com "30" unidades
Adicionar produto "computador" com "100" unidades
Então o estoque terá "3" produtos cadastrados
ParâmetrosParâmetros
Chamada ao
cenário
Chamada ao
cenário
Chamadas
ao cenário
46. 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();
}
47. 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
48. 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.
49. 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
50. 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.
51. 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)
52. 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íngua
Padrão das histórias
Extensão dos
arquivos
de histórias
Extensão dos arquivos
de histórias convertidos
Habilita os passos
comuns do DBehave
53. 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
54. 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.
55. 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/