Introdução
Este post tem o objetivo de demonstrar, de forma prática, a metodologia do uso do Cucumber, usando Eclipe e Java.
Aprenda mais sobre o Cucumber aqui.
Criação do Projeto
Vamos criar um projeto Maven Java no Eclipse.
- Abra o Eclipse.
- Clique no menu File / New / Maven Project
- Deixe os valores padrão e clique em Next
- Utilize o archetype quickstart (padrão) e clique em Next
- Configure os parâmetros do projeto
- Group Id: com.maxidica.tdd
- Artifact Id: calculadora
- Deixe os demais campos padrão
- Clique no botão Finish
 
Ajustando pom.xml
Agora vamos incluir as dependências necessárias para o projeto.
- Abra o arquivo pom.xml
- Clique na aba Dependencies
- Remova o junit 3.8.1
- Adicione o junit 4 (4.1.2)
- Adicione as dependências do Cucumber
- cucumber-java
- cucumber-junit
- cucumber-picocontainer
- Configure as dependências com escopo test
 
Criando arquivo de estórias
Iremos criar o diretório de fonte, chamado resource.
- Clique com o botão direito no projeto
- Escolha New / Source Folder
- Digite src/test/resource
- Clique em Finish
Eliminando classes desnecessárias
Exclua todos os arquivos .java do projeto (App.java e AppTest.java).
Criando a classe CalcRunner
Essa classe é responsável pela execução do teste.
- Clique com o botão direito em src/test/java
- Escolha New / Class
- Digite CalcRunner
- Clique em Finish
package com.maxidica.tdd.calculadora;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {“html:target/cucumber-html-report”, “json:target/cucumber-json-report.json”},
features = “src/test/resource”
)
public class CalcRunner {
}
Criando arquivo feature
Esse arquivo é responsável pela execução dos testes.
- Clique com o botão direito em src/test/resource
- Escolha New / File
- Digite o nome Calc.feature
- Digite o conteúdo abaixo
#language: en Feature: Calc Como usuario entrar com 2 valores Com objetivo de obter um resultado Scenario: Somar Given que eu escolha somar When eu preencho o primeiro número com o valor '1' And eu preencho o segundo número com o valor '1' Then eu devo ver o resultado como '2'
Rodando o 1º teste
Esse teste criará a estrutura para definirmos a classe de execução.
- Clique com o botão direito na classe CalcRunner.java
- Escolha Run As / JUnit Test
- Na aba Console, aparecerá o resultado com os métodos a serem codificados
1 Scenarios (1 undefined)
4 Steps (4 undefined)
0m0,000s
You can implement missing steps with the snippets below:
@Given("^que eu escolha somar$")
public void que_eu_escolha_somar() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@When("^eu preencho o primeiro número com o valor '(\\d+)'$")
public void eu_preencho_o_primeiro_número_com_o_valor(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@When("^eu preencho o segundo número com o valor '(\\d+)'$")
public void eu_preencho_o_segundo_número_com_o_valor(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@Then("^eu devo ver o resultado como '(\\d+)'$")
public void eu_devo_ver_o_resultado_como(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
Criar classe com os passos do teste
Agora, iremos criar a classe responsável pela execução dos passos do teste.
- Clicar com o botão direito em src/test/java
- Escolher New / Class
- Defina o nome como CalcSteps
- Então, basta copiar os métodos (apresentados no Console) para dentro da classe
package com.maxidica.tdd.calculadora;
import cucumber.api.PendingException;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class CalcSteps {
@Given("^que eu escolha somar$")
public void que_eu_escolha_somar() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@When("^eu preencho o primeiro número com o valor '(\\d+)'$")
public void eu_preencho_o_primeiro_número_com_o_valor(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@When("^eu preencho o segundo número com o valor '(\\d+)'$")
public void eu_preencho_o_segundo_número_com_o_valor(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@Then("^eu devo ver o resultado como '(\\d+)'$")
public void eu_devo_ver_o_resultado_como(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
}
Criar a aplicação
Essa classe é que conterá as regras de negócio que queremos, neste caso, calcular a soma de números.
- Clique com o botão direito em src/main/java
- Escolha New / Class
- Defina o nome Calc
package com.maxidica.tdd.calculadora;
public class Calc {
public int somar( int a, int b ) {
return a + b;
}
}
Codificando os métodos na classe CalcSteps
Agora, precisamos codificar os métodos.
package com.maxidica.tdd.calculadora;
import static org.junit.Assert.assertEquals;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class CalcSteps {
Calc calc;
int num1, num2;
@Given("^que eu escolha somar$")
public void que_eu_escolha_somar() {
calc = new Calc();
}
@When("^eu preencho o primeiro número com o valor '(\\d+)'$")
public void eu_preencho_o_primeiro_número_com_o_valor(int arg1) {
num1 = arg1;
}
@When("^eu preencho o segundo número com o valor '(\\d+)'$")
public void eu_preencho_o_segundo_número_com_o_valor(int arg1) {
num2 = arg1;
}
@Then("^eu devo ver o resultado como '(\\d+)'$")
public void eu_devo_ver_o_resultado_como(int arg1) {
assertEquals(arg1,calc.somar(num1,num2));
}
}
Teste final
Então podemos executar o teste final na classe CalcRunner.
- Clique com o botão direito na classe CalcRunner.java
- Escolha Run As / JUnit Test
- Verifique o resultado no Console
1 Scenarios (1 passed) 4 Steps (4 passed) 0m0,146s
Provocando erro no teste
Para executar a falha, devemos alterar o arquivo feature.
- Edite o arquivo Calc.feature
- Altere o texto, eu devo ver o resultado como ‘3’
- Salve o arquivo
- Rode o teste na classe CalcRunner.java
- Perceba que no Console, apresentará erro de execução
1 Scenarios (1 failed) 4 Steps (1 failed, 3 passed) 0m0,163s java.lang.AssertionError: expected:<3> but was:<2> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:645) at org.junit.Assert.assertEquals(Assert.java:631) at com.maxidica.tdd.calculadora.CalcSteps.eu_devo_ver_o_resultado_como(CalcSteps.java:31) at ✽.Then eu devo ver o resultado como '3'(Calc.feature:10)
Essa é a parte interessante do teste. Alterando o arquivo feature, podemos validar se a aplicação está funcionando de forma correta.
Você pode baixar o projeto pronto no Github.