1. Overview

In this quick tutorial, we'll learn how to use Java 8 lambda expressions with Cucumber.

2. Maven Configuration

First, we will need to add the following dependency to our pom.xml:

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-java8</artifactId>
    <version>1.2.5</version>
    <scope>test</scope>
</dependency>

The cucumber-java8 dependency can be found on Maven Central.

3. Step Definitions Using Lambda

Next, we will discuss how to write our Step Definitions using Java 8 lambda expressions:

public class ShoppingStepsDef implements En {

    private int budget = 0;

    public ShoppingStepsDef() {
        Given("I have (\\d+) in my wallet", (Integer money) -> budget = money);

        When("I buy .* with (\\d+)", (Integer price) -> budget -= price);

        Then("I should have (\\d+) in my wallet", (Integer finalBudget) -> 
          assertEquals(budget, finalBudget.intValue()));
    }
}

We used a simple shopping feature as an example:

Given("I have (\\d+) in my wallet", (Integer money) -> budget = money);

Notice how:

  • In this step we set the initial budget, we have one parameter money with type Integer
  • As we are using one statement we didn't need curly braces

4. Test Scenario

Finally, let's take a look at our test scenarios:

Feature: Shopping

    Scenario: Track my budget 
        Given I have 100 in my wallet
        When I buy milk with 10
        Then I should have 90 in my wallet
    
    Scenario: Track my budget 
        Given I have 200 in my wallet
        When I buy rice with 20
        Then I should have 180 in my wallet

And the test configuration:

@RunWith(Cucumber.class)
@CucumberOptions(features = { "classpath:features/shopping.feature" })
public class ShoppingIntegrationTest {
    // 
}

For more details on the Cucumber Configuration, check Cucumber and Scenario Outline tutorial.

5. Conclusion

We learned how to use Java 8 lambda expressions with Cucumber.

As always, the full source code is available over on GitHub.