Quando eu pedir que ela diga ola Entao ela deveria responder "Ola Paulo!"EOFObserve que, para o suporte ao portugues, iniciamos o arquivo de funcionalidade com o comentario # language: pt. A seguir, utilizamos as palavras equivalentes ao que teriamos em ingles: 'Funcionalidade' para 'Feature', 'Cenario' para 'Scenario', e assim por diante. Note que agora ha uma diferenca sutil, em relacao ao comportamento da aplicacao, que eu especifiquei para esta versao em portugues do Brasil. Perceba esta mudanca lendo a definicao do cenario.Para termos a apresentacao dos relatorios em portugues, tambem precisaremos alterar o comportamento do Runner do Cucumber. O patch a seguir aplica esta mudanca. (novamente, copie e cole o codigo abaixo em teu shell):patch -p1 <<'EOF'--- ./src/test/java/com/ladoservidor/cucumber/helloworld/RunCukesTest.java 2013-04-05 15:44:14.000000000 -0300+++ ../HelloWorld.pt/src/test/java/com/ladoservidor/cucumber/helloworld/RunCukesTest.java 2013-04-05 15:45:15.000000000 -0300@@ -8,7 +8,8 @@ import org.junit.runner.RunWith; format = { "pretty", "html:target/cucumber-html-report", - "json-pretty:target/cucumber-json-report.json"+ "json-pretty:target/cucumber-json-report.json",+ "json:target/cucumber-pt.json" } ) public class RunCukesTest {EOFComo estamos agora descrevendo os passos dos cenarios em portugues, faremos uso das anotacoes correspondentes a nossa lingua. Entao, alteraremos o codigo do arquivo HelloStepdefs.java pela aplicacao do patch a seguir:patch -p1 <<'EOF'--- ./src/test/java/com/ladoservidor/cucumber/helloworld/HelloStepdefs.java 2013-04-05 15:44:14.000000000 -0300+++ ../HelloWorld.pt/src/test/java/com/ladoservidor/cucumber/helloworld/HelloStepdefs.java 2013-04-05 15:45:15.000000000 -0300@@ -1,8 +1,8 @@ package com.ladoservidor.cucumber.helloworld; -import cucumber.api.java.en.Given;-import cucumber.api.java.en.Then;-import cucumber.api.java.en.When;+import cucumber.api.java.pt.Dado;+import cucumber.api.java.pt.Quando;+import cucumber.api.java.pt.Entao; import static org.junit.Assert.assertEquals; @@ -10,17 +10,17 @@ public class HelloStepdefs { private Hello hello; private String hi; - @Given("^I have a hello app with \"([^\"]*)\"$")+ @Dado("^que eu tenho uma app que recebe \"([^\"]*)\"$") public void I_have_a_hello_app_with(String greeting) { hello = new Hello(greeting); } - @When("^I ask it to say hi$")+ @Quando("^eu pedir que ela diga ola$") public void I_ask_it_to_say_hi() { hi = hello.sayHi(); } - @Then("^it should answer with \"([^\"]*)\"$")+ @Entao("^ela deveria responder \"([^\"]*)!\"$") public void it_should_answer_with(String expectedHi) { assertEquals(expectedHi, hi); }EOFPor fim, voce deve ter percebido uma pequena alteracao no comportamento esperado pelo usuario e, isso, deve ser alterado em nossa implementacao para o metodo sayHi, apos a aplicacao do patch a seguir:patch -p1 <<'EOF'--- ./src/main/java/com/ladoservidor/cucumber/helloworld/Hello.java 2013-04-05 15:44:14.000000000 -0300+++ ../HelloWorld.pt/src/main/java/com/ladoservidor/cucumber/helloworld/Hello.java 2013-04-05 15:45:15.000000000 -0300@@ -8,6 +8,6 @@ public class Hello { } public String sayHi() {- return greeting + " World";+ return "Ola " + greeting; } } EOFE, isso e tudo o necessario para a nacionalizacao da nossa aplicacao Hello World. Testando a execucao da funcinalidade descrita atraves da execucao do Maven (comando "mvn test"), deveremos ter uma saida que contera o seguinte texto:------------------------------------------------------- T E S T S-------------------------------------------------------Running com.ladoservidor.cucumber.helloworld.RunCukesTest# language: ptFuncionalidade: Diga Ola Cenario: Dizer "Ola Fulano!" # com/ladoservidor/cucumber/helloworld/helloworld.feature:4 Dado que eu tenho uma app que recebe "Paulo" # HelloStepdefs.I_have_a_hello_app_with(String) Quando eu pedir que ela diga ola # HelloStepdefs.I_ask_it_to_say_hi() Entao ela deveria responder "Ola Paulo!" # HelloStepdefs.it_should_answer_with(String)Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.933 secResults :Tests run: 4, Failures: 0, Errors: 0, Skipped: 0Proximos capitulosAs proximas partes deste tutorial cobrirao exemplos mais realistas, com mais cenarios, e utilizando, tambem, testes com Arquillian para a camada de modelo da aplicacao que sera apresentada. Explicarei, de forma mais conceitual, os beneficios que a pratica do BDD pode trazer. Em seguida, apresentarei testes na camada de apresentacao utilizando o Selenium.Ao concluir todas as partes deste tutorial, eu espero que voce compreenda o