estado sera esperado. Simples assim.Apesar de natural, a linguagem utilizada para a definicao da estoria nao e tao livre assim. Ela e uma DSL (domain specific language), que faz parte do Cucumber e que e chamada de Gherkin. As palavras Feauture, Scenario, Given, When, Then e algumas outras, sao definidas nesta linguagem.Como desenvolvedores, agora faremos uso do Cucumber para que possamos tornar testaveis os cenarios definidos em uma funcionalidade do usuario. Sendo assim, nosso proximo passo sera criar um POM para o projeto que sera implementado e testavel atraves do Cucumber. Entao, copie o codigo abaixo e cole em seu shell:cat > pom.xml <<'EOF'<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ladoservidor</groupId> <artifactId>cucumber-jvm-helloworld</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>cucumber-jvm/HelloWorld</name> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <encoding>UTF-8</encoding> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.2</version> <configuration> <useFile>false</useFile> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java</artifactId> <version>1.1.2</version> <scope>test</scope> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-junit</artifactId> <version>1.1.2</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies></project>EOFUtilizando o Maven na construcao da aplicacao, o Cucumber se beneficiara da estrutura do JUnit para a realizacao dos testes que criaremos a seguir. Tambem poderiamos utilizar o Ant para criar um build.xml e disparar um executor (Runner) do Cucumber atraves de uma linha de comando (ele possui, entao, dois runners: o cucumber-core e o cucumber-junit). Um exemplo que apresenta o uso de um build.xml e disponibilizado na aplicacao java-helloworld que vem como exemplo junto ao codigo fonte do Cucumber. Eu utilizo essa aplicacao, com pequenas alteracoes, para escrever este post.Ate este ponto, ja temos a seguinte estrutura montada em nosso sistema de arquivos:. pom.xml src test resources com ladoservidor cucumber helloworld helloworld.featureNossos proximos passos serao a criacao de dois arquivos. O primeiro sera responsavel por configurar um runner para o Cucumber que utilizara o JUnit. O segundo sera um TestCase JUnit, com anotacoes Cucumber, que intepretara uma funcionalidade (arquivo .feature) descrito pelo usuario.Copie e cole o seguinte conteudo, em teu shell, para criar o primeiro arquivo:d=src/test/java/com/ladoservidor/cucumber/helloworld; mkdir -p $dcat > $d/RunCukesTest.java <<'EOF'package com.ladoservidor.cucumber.helloworld;import cucumber.api.junit.Cucumber;import org.junit.runner.RunWith;@RunWith(Cucumber.class)@Cucumber.Options( format = { "pretty", "html:target/cucumber-html-report", "json-pretty:target/cucumber-json-report.json" })public class RunCukesTest {}EOFIsso criara a classe com.ladoservidor.cucumber.helloworld.RunCukesTest que, como podemos perceber, possui a anotacao @RunWith do JUnit recebendo Cucumber.class. Desta forma, na fase de testes do Maven (ao invocarmos, por exemplo, o comando "mvn test"), quando ele localizar classes de teste para serem testadas com o JUnit, ele repassara o controle da execucao dos testes para o Cucumber.A anotacao @Cucumber.Options pode receber parametros opcionais como, por exemplo, format, features e outras listadas na documentacao da anotacao. O parametro format configura opcoes de formatacao para a saida dos testes executados pelo Cucumber e que poderiam, tambem, ser passadas via linha de comando para o runner cucumber-core. Em nosso caso, estamos informado ao Cucumber (com o valor pretty) que ele devera imprimir uma saida para cada passo de um cenario e apresenta-la com uma cor que represente o resultado da sua execucao (passou, falhou, estava indefinido ou ignorado). Alem disso, a saida devera gerar um relatorio em HTML (para a execucao de cada cenario) no diretorio target/cucumber-html-report e, este relatorio, lera o arquivo target/cucumber-json-report.json como input.Neste