Exemplos de testes escritos com o Cucumber:
Teste de calculadora clássico retirado do github.
Teste de aceitação do projeto: psy-q/leihs
Teste de aceitação do projeto: psy-q/stizun
Esses testes ajudam muito o projeto. A entrada do teste é usada como documentação do sistema e é um documento executável em comum entre a equipe e o cliente. Como não é desconexo da implementação e, normalmente, executado pelo CI ele não se desatualiza tão frequentemente.
Para os desenvolvedores esse texto é um pouco da expectativa e dá uma ideia do que o cliente quer.
Para o cliente pode ser usado como uma validação das regras explicadas ou desenvolvidas pela equipe.
O Cucumber-JVM é a implementação do Cucumber em Java com suporte as linguagens mais populares da JVM. No post no Aslak Hellesøy criador do Cucumber tem mais detalhes.
Já utilizei o Cucumber em diversos projetos Ruby e sempre gostei muito. Nos próximos Java que eu me envolver é bem provável que o Cucumber-JVM estará lá…
O Cucumber utilizado com Ruby e muito bom, mas essa versao com Java nao me pareceu muito diferente do JBehave.
guerios
Interessante !
Paulo_Silveira
boa notícia (e bem escrita! Valeu Joao Vitor)
rsbrum
Não seria uma cópia do Jbehave ??
Adelar
Muito interessante mesmo!
lazaropj
Não conheço a ferramente, mas fiquei interessado.
Mas não entendi direito.
Se a ideia é só ter um texto como documentação, onde entra o java aí?
Por acaso esses testes aí podem virar alguma classe java diretamente desse tal texto?
joao.vitor
Falei mais do Cucumber que o Cucumber JVM. O Cucumber JVM pode integrar com várias linguagens da JVM: Java, Groovy, JRuby.
Mas um exemplo vale mais que mil palavras.
Veja trechos de código retirado dos exemplos do Cucumber JVM.
packagecucumber.examples.java.websockets;importcucumber.annotation.en.Given;importcucumber.annotation.en.Then;importcucumber.annotation.en.When;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;import staticorg.junit.Assert.assertEquals;publicclassTemperatureStepdefs{privatefinalWebDriverwebDriver;publicTemperatureStepdefs(SharedDriverwebDriver){this.webDriver=webDriver;}@Given("^I am on the front page$")publicvoidi_am_on_the_front_page(){webDriver.get("http://localhost:"+ServerHooks.PORT);}@When("^I enter (.+) Celcius$")publicvoidi_enter_Celcius(doublecelcius){webDriver.findElement(By.id("celcius")).sendKeys(String.valueOf(celcius));}@Then("^I should see (.+) Fahrenheit$")publicvoidi_should_see_Fahrenheit(doublefahrenheit){assertEquals(String.valueOf(fahrenheit),webDriver.findElement(By.id("fahrenheit")).getAttribute("value"));}}
No caso do Java o interpretador identifica as palavras chaves e procura métodos anotados que casem com texto. Ao encontrar um método anotado para ser executado ele o invoca.
Na prática o que você tem é uma documentação executável mesmo. Na interpretação o Cucumber pode executar blocos de código Java, Ruby, Scala, Clojure…
tnaires
Os beneficios de ferramentas orientadas a BDD vao alem de ter testes escritos em linguagem natural executaveis.
Seguem dois links interessantes para saber mais sobre BDD: