omer keynan
omer keynan

Reputation: 155

Cucumber with junit5 and java8

I'm trying to create BDD tests for a spring boot application that is written in java11, and using junit5 for tests.

I'm trying version 6.9.1 of cucumber and my dependencies for this part are:

<dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-java8</artifactId>
      <version>${cucumber.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-junit-platform-engine</artifactId>
      <version>${cucumber.version}</version>
      <scope>test</scope>
    </dependency>

Without a single example I could find in the cucumber documentation I tried fuse some snippets I found online that show this dependency list to be sufficient however, when I try their samples, there I can't find any of the following:

  1. CucumberExtension - instead there is an annotation @Cucumber which seems to be doing that.
  2. @CucumberOptions - there is an interface CucmberOptions which I can implement and return all required properties, but this feels like a step back from the parameterized annotation.

Can anyone provide a guide, documentation, or any other way to achieve my goal?

Thanks

Upvotes: 3

Views: 6905

Answers (1)

M.P. Korstanje
M.P. Korstanje

Reputation: 12029

It's worth reading the introduction to JUnit 5. You are making a common mistake in thinking that JUnit 5 is a monolith. Rather:

https://junit.org/junit5/docs/current/user-guide/#overview-what-is-junit-5

Unlike previous versions of JUnit, JUnit 5 is composed of several different modules from three different sub-projects.

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

Like JUnit Jupiter, Cucumber is a test engine using the JUnit Platform. Extensions are a concept from JUnit Jupiter and don't carry over to Cucumber.

Without a single example I could find in the cucumber documentation.

You'll not find anything in the main documentation until the JUnit 5 integration is feature complete. Until that time it is perfectly possible to use Cucumbers JUnit 4 integration with JUnit Vintage.

However if you're more experimentally minded you can use the documentation with the source code:

https://github.com/cucumber/cucumber-jvm/tree/main/junit-platform-engine

@CucumberOptions - there is an interface CucmberOptions which I can implement and return all required properties, but this feels like a step back from the parameterized annotation.

The Cucumber JUnit Platform integration defaults to scanning for glue and features on the class path root. If you follow the conventional maven/gradle/java project layout no additional configuration is needed.

So step definitions go in src/test/java/com/example and features in src/test/resources/com/example.

If you have a more complicated setup you should either wait and use JUnit4/Junit Vintage or simplify your setup.

Upvotes: 2

Related Questions