Cucumber-JVM 1.0.0 lançado

Hoje foi lançada a versão 1.0.0 do Cucumber-JVM. A divulgação foi feita na lista do Cucumber e é muito importante.

Tradução livre do wiki: https://github.com/cucumber/cucumber/wiki/

Tradução livre do http://cukes.info/

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.

Interessante !

boa notícia (e bem escrita! Valeu Joao Vitor)

Não seria uma cópia do Jbehave ??

Muito interessante mesmo!

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?

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.

Conversão de temperatura

Feature: Temperature conversion
  
  Scenario: Celcius to Fahrenheit
    Given I am on the front page
    When I enter 0 Celcius
    Then I should see 32.0 Fahrenheit

TemperatureStepdefs - Java

package cucumber.examples.java.websockets;

import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

import static org.junit.Assert.assertEquals;

public class TemperatureStepdefs {
    private final WebDriver webDriver;

    public TemperatureStepdefs(SharedDriver webDriver) {
        this.webDriver = webDriver;
    }

    @Given("^I am on the front page$")
    public void i_am_on_the_front_page() {
        webDriver.get("http://localhost:" + ServerHooks.PORT);
    }

    @When("^I enter (.+) Celcius$")
    public void i_enter_Celcius(double celcius) {
        webDriver.findElement(By.id("celcius")).sendKeys(String.valueOf(celcius));
    }

    @Then("^I should see (.+) Fahrenheit$")
    public void i_should_see_Fahrenheit(double fahrenheit) {
        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…

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: