From 5d4a9490de2cc594deeefdff60bb967c85ddca66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Jourdan-Weil?= Date: Fri, 11 Jul 2025 09:13:39 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20chore:=20use=20JUnit=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In our internal tests + examples + integration tests --- CHANGELOG.md | 16 +++++ README.md | 4 +- build.sbt | 64 ++++++++++++++----- .../io/cucumber/scala/ScalaDslStepsTest.scala | 8 +-- .../io/cucumber/scala/ScalaDslStepsTest.scala | 8 +-- .../io/cucumber/scala/ScalaBackendTest.scala | 6 +- .../scala/ScalaDslDataTableTypeTest.scala | 4 +- ...lDefaultDataTableCellTransformerTest.scala | 4 +- ...DefaultDataTableEntryTransformerTest.scala | 4 +- ...laDslDefaultParameterTransformerTest.scala | 4 +- .../scala/ScalaDslDocStringTypeTest.scala | 2 +- .../io/cucumber/scala/ScalaDslHooksTest.scala | 6 +- .../scala/ScalaDslParameterTypeTest.scala | 4 +- .../io/cucumber/scala/ScalaSnippetTest.scala | 4 +- .../io/cucumber/scala/StepableTest.scala | 4 +- docs/usage.md | 48 +++++++++++++- examples/{ => examples-junit4}/README.md | 4 +- .../scalacalculator/RpnCalculator.scala | 0 .../scalacalculator/basic_arithmetic.feature | 0 .../RpnCalculatorStepDefinitions.scala | 0 .../scalacalculator/RunCukesTest.scala | 5 +- examples/examples-junit5/README.md | 3 + .../scalacalculator/RpnCalculator.scala | 34 ++++++++++ .../scalacalculator/basic_arithmetic.feature | 7 ++ .../test/resources/junit-platform.properties | 4 ++ .../RpnCalculatorStepDefinitions.scala | 23 +++++++ .../scalacalculator/RunCukesTest.scala | 13 ++++ .../src/test/resources/cucumber.properties | 1 - .../test/resources/junit-platform.properties | 3 + .../src/test/scala/cukes/RunCukesTest.scala | 13 ++-- .../src/test/scala/cukes/StepDefs.scala | 2 +- .../scala/datatables/RunDatatablesTest.scala | 18 ++++-- .../scala/docstring/RunDocStringTest.scala | 18 ++++-- .../test/scala/isolated/RunIsolatedTest.scala | 18 ++++-- .../src/test/scala/misc/RunMiscTest.scala | 18 ++++-- .../src/test/scala/object/ObjectSteps.scala | 2 +- .../src/test/scala/object/RunObjectTest.scala | 18 ++++-- .../RunParameterTypesTest.scala | 18 ++++-- .../statichooks/RunStaticHooksTest.scala | 34 ++++++---- .../scala/statichooks/StaticHooksSteps.scala | 2 +- .../src/test/resources/cucumber.properties | 1 - .../test/resources/junit-platform.properties | 3 + .../test/scala/jackson/RunJacksonTest.scala | 18 ++++-- .../src/test/resources/cucumber.properties | 1 - .../test/resources/junit-platform.properties | 3 + .../scala/di/RunDependencyInjectionTest.scala | 18 ++++-- project/plugins.sbt | 3 + 47 files changed, 390 insertions(+), 105 deletions(-) rename examples/{ => examples-junit4}/README.md (50%) rename examples/{ => examples-junit4}/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala (100%) rename examples/{ => examples-junit4}/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature (100%) rename examples/{ => examples-junit4}/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala (100%) rename examples/{ => examples-junit4}/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala (67%) create mode 100644 examples/examples-junit5/README.md create mode 100644 examples/examples-junit5/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala create mode 100644 examples/examples-junit5/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature create mode 100644 examples/examples-junit5/src/test/resources/junit-platform.properties create mode 100644 examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala create mode 100644 examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala delete mode 100644 integration-tests/common/src/test/resources/cucumber.properties create mode 100644 integration-tests/common/src/test/resources/junit-platform.properties delete mode 100644 integration-tests/jackson/src/test/resources/cucumber.properties create mode 100644 integration-tests/jackson/src/test/resources/junit-platform.properties delete mode 100644 integration-tests/picocontainer/src/test/resources/cucumber.properties create mode 100644 integration-tests/picocontainer/src/test/resources/junit-platform.properties diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e4abd80..c81b163c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,26 @@ See also the [CHANGELOG](https://github.com/cucumber/cucumber-jvm/blob/master/CH ---- ## [Unreleased] (In Git) +đŸ“ĸ As of Cucumber JVM 7.24, `cucumber-junit` (JUnit 4) is deprecated in favour of `cucumber-junit-platform-engine` +(JUnit 5). Users are strongly encouraged to use the latter. + +📖 Read the "Run" section in [Basic usage](docs/usage.md) to see examples of Cucumber + JUnit 5. + +â„šī¸ `cucumber-junit-platform-engine` 7.26+ is required when using SBT, lower versions will run Cucumber tests twice and +fail with runtime errors due to [a bug in the SBT/JUnit 5 interface](https://github.com/sbt/sbt-jupiter-interface/issues/142). +Thanks @mpkorstanje for providing a [workaround in Cucumber JVM](https://github.com/cucumber/cucumber-jvm/pull/3023)! + ### Added +- [Documentation] Integration with JUnit 5 +- Add example project with JUnit 5 + ### Changed +- [Core] Update `cucumber-core` dependency to [7.26.0](https://github.com/cucumber/cucumber-jvm/blob/main/CHANGELOG.md) +- [Internal] Update integration tests to use JUnit 5 +- Drop support of Scala 2.12 in example test projects + ### Deprecated ### Removed diff --git a/README.md b/README.md index b4a2509b..b538beaa 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ See: https://cucumber.io/support ## Compatibility matrix Cucumber Scala has a different release cycle than other Cucumber projects that you might use -(like _cucumber-junit_). +(like _cucumber-junit-platform-engine_). As a rule of thumb, you can assume that latest version of Cucumber Scala targets the latest version of Cucumber Core projects. @@ -44,7 +44,7 @@ The table below shows the compatible versions: - [Hooks](docs/hooks.md) - [Transformers](docs/transformers.md) - [Default Jackson DataTable Transformer](docs/default_jackson_datatable_transformer.md) -- [Example project](examples/README.md) +- [Example project](examples/examples-junit5/README.md) - [Reference documentation for Java](https://docs.cucumber.io/docs/cucumber/) - [Changelog](CHANGELOG.md) diff --git a/build.sbt b/build.sbt index c0b0915c..ad4adcf0 100644 --- a/build.sbt +++ b/build.sbt @@ -39,15 +39,16 @@ scalaVersion := scala213 // Library versions -val cucumberVersion = "7.23.0" +val cucumberVersion = "7.26.0" val jacksonVersion = "2.19.1" val mockitoScalaVersion = "1.17.45" val junitVersion = "4.13.2" +val junitJupiterVersion = "5.13.3" +val junitPlatformVersion = "1.13.3" // Projects and settings lazy val commonSettings = Seq( - libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test, scalacOptions ++= { CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, 12)) => ScalacOptions.scalacOptions212 @@ -58,6 +59,13 @@ lazy val commonSettings = Seq( } ) +lazy val junit4SbtSupport = Seq( + libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test +) +lazy val junit5SbtSupport = Seq( + libraryDependencies += "com.github.sbt.junit" % "jupiter-interface" % JupiterKeys.jupiterVersion.value % Test +) + lazy val root = (project in file(".")) .settings(commonSettings) .settings( @@ -68,19 +76,21 @@ lazy val root = (project in file(".")) integrationTestsCommon.projectRefs ++ integrationTestsJackson.projectRefs ++ integrationTestsPicoContainer.projectRefs ++ - examples.projectRefs: _* + examplesJunit4.projectRefs ++ + examplesJunit5.projectRefs: _* ) // Main project lazy val cucumberScala = (projectMatrix in file("cucumber-scala")) .settings(commonSettings) + .settings(junit5SbtSupport) .settings( name := "cucumber-scala", libraryDependencies ++= Seq( "io.cucumber" % "cucumber-core" % cucumberVersion, // Users have to provide it (for JacksonDefaultDataTableTransformer) "com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion % Provided, - "junit" % "junit" % junitVersion % Test, + "org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test, ("org.mockito" %% "mockito-scala" % mockitoScalaVersion % Test) .cross(CrossVersion.for3Use2_13) ), @@ -127,11 +137,13 @@ lazy val cucumberScala = (projectMatrix in file("cucumber-scala")) lazy val integrationTestsCommon = (projectMatrix in file("integration-tests/common")) .settings(commonSettings) + .settings(junit5SbtSupport) .settings( name := "integration-tests-common", libraryDependencies ++= Seq( - "junit" % "junit" % junitVersion % Test, - "io.cucumber" % "cucumber-junit" % cucumberVersion % Test + "org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test, + "org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test, + "io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test ), publishArtifact := false ) @@ -141,11 +153,13 @@ lazy val integrationTestsCommon = lazy val integrationTestsJackson = (projectMatrix in file("integration-tests/jackson")) .settings(commonSettings) + .settings(junit5SbtSupport) .settings( name := "integration-tests-jackson", libraryDependencies ++= Seq( - "junit" % "junit" % junitVersion % Test, - "io.cucumber" % "cucumber-junit" % cucumberVersion % Test, + "org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test, + "org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test, + "io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test, "com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion % Test ), publishArtifact := false @@ -156,11 +170,13 @@ lazy val integrationTestsJackson = lazy val integrationTestsPicoContainer = (projectMatrix in file("integration-tests/picocontainer")) .settings(commonSettings) + .settings(junit5SbtSupport) .settings( name := "integration-tests-picocontainer", libraryDependencies ++= Seq( - "junit" % "junit" % junitVersion % Test, - "io.cucumber" % "cucumber-junit" % cucumberVersion % Test, + "org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test, + "org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test, + "io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test, "io.cucumber" % "cucumber-picocontainer" % cucumberVersion % Test ), publishArtifact := false @@ -169,8 +185,9 @@ lazy val integrationTestsPicoContainer = .jvmPlatform(scalaVersions = Seq(scala3, scala213, scala212)) // Examples project -lazy val examples = (projectMatrix in file("examples")) +lazy val examplesJunit4 = (projectMatrix in file("examples/examples-junit4")) .settings(commonSettings) + .settings(junit4SbtSupport) .settings( name := "scala-examples", libraryDependencies ++= Seq( @@ -180,7 +197,22 @@ lazy val examples = (projectMatrix in file("examples")) publishArtifact := false ) .dependsOn(cucumberScala % Test) - .jvmPlatform(scalaVersions = Seq(scala3, scala213, scala212)) + .jvmPlatform(scalaVersions = Seq(scala3, scala213)) + +lazy val examplesJunit5 = (projectMatrix in file("examples/examples-junit5")) + .settings(commonSettings) + .settings(junit5SbtSupport) + .settings( + name := "scala-examples", + libraryDependencies ++= Seq( + "io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test, + "org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test, + "org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test + ), + publishArtifact := false + ) + .dependsOn(cucumberScala % Test) + .jvmPlatform(scalaVersions = Seq(scala3, scala213)) // Version policy check @@ -204,12 +236,12 @@ releaseProcess := Seq[ReleaseStep]( runTest, setReleaseVersion, // the 2 following steps are part of the Cucumber release process - //commitReleaseVersion, - //tagRelease, + // commitReleaseVersion, + // tagRelease, releaseStepCommandAndRemaining("publishSigned"), releaseStepCommand("sonatypeBundleRelease"), setNextVersion // the 2 following steps are part of the Cucumber release process - //commitNextVersion, - //pushChanges + // commitNextVersion, + // pushChanges ) diff --git a/cucumber-scala/src/test/scala-2/io/cucumber/scala/ScalaDslStepsTest.scala b/cucumber-scala/src/test/scala-2/io/cucumber/scala/ScalaDslStepsTest.scala index 8504baf9..f28a304a 100644 --- a/cucumber-scala/src/test/scala-2/io/cucumber/scala/ScalaDslStepsTest.scala +++ b/cucumber-scala/src/test/scala-2/io/cucumber/scala/ScalaDslStepsTest.scala @@ -1,8 +1,8 @@ package io.cucumber.scala import io.cucumber.core.backend._ -import org.junit.Assert.{assertEquals, assertTrue} -import org.junit.Test +import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue} +import org.junit.jupiter.api.Test import scala.annotation.nowarn import scala.util.Try @@ -339,8 +339,8 @@ class ScalaDslStepsTest { // The result is different between Scala versions, that's why we don't check it precisely // assertEquals("$anonfun$can_provide_location_of_step$1", matched.getMethodName) assertTrue( - s"${matched.getClassName} did not contain $exceptionClassName", - matched.getClassName.contains(exceptionClassName) + matched.getClassName.contains(exceptionClassName), + s"${matched.getClassName} did not contain $exceptionClassName" ) assertEquals(exceptionFile, matched.getFileName) assertEquals(exceptionLine, matched.getLineNumber) diff --git a/cucumber-scala/src/test/scala-3/io/cucumber/scala/ScalaDslStepsTest.scala b/cucumber-scala/src/test/scala-3/io/cucumber/scala/ScalaDslStepsTest.scala index 6d02b688..f6b5e074 100644 --- a/cucumber-scala/src/test/scala-3/io/cucumber/scala/ScalaDslStepsTest.scala +++ b/cucumber-scala/src/test/scala-3/io/cucumber/scala/ScalaDslStepsTest.scala @@ -1,8 +1,8 @@ package io.cucumber.scala import io.cucumber.core.backend._ -import org.junit.Assert.{assertEquals, assertTrue} -import org.junit.Test +import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue} +import org.junit.jupiter.api.Test import scala.annotation.nowarn import scala.util.Try @@ -338,8 +338,8 @@ class ScalaDslStepsTest { // The result is different between Scala versions, that's why we don't check it precisely assertTrue( - s"$matched did not contain $exceptionClassName", - matched.toString.contains(exceptionClassName) + matched.toString.contains(exceptionClassName), + s"$matched did not contain $exceptionClassName" ) assertEquals(exceptionFile, matched.getFileName) assertEquals(exceptionLine, matched.getLineNumber) diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaBackendTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaBackendTest.scala index a0b1d742..80c9396c 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaBackendTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaBackendTest.scala @@ -7,8 +7,8 @@ import io.cucumber.scala.steps.errors.incorrectclasshooks.IncorrectClassHooksDef import io.cucumber.scala.steps.errors.staticclasshooks.StaticClassHooksDefinition import io.cucumber.scala.steps.objects.StepsInObject import io.cucumber.scala.steps.traits.StepsInTrait -import org.junit.Assert.{assertEquals, assertTrue, fail} -import org.junit.{Before, Test} +import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue, fail} +import org.junit.jupiter.api.{BeforeEach, Test} import org.mockito.ArgumentMatchers.any import org.mockito.Mockito._ @@ -30,7 +30,7 @@ class ScalaBackendTest { private var backend: ScalaBackend = _ - @Before + @BeforeEach def beforeEach(): Unit = { // Reset mocks reset(fakeGlue, fakeLookup, fakeContainer) diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDataTableTypeTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDataTableTypeTest.scala index 8b70385e..205cf2ca 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDataTableTypeTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDataTableTypeTest.scala @@ -2,8 +2,8 @@ package io.cucumber.scala import io.cucumber.datatable.DataTable import io.cucumber.scala.ScalaDslDataTableTypeTest.{Author, Cell, GroupOfAuthor} -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test import scala.jdk.CollectionConverters._ diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableCellTransformerTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableCellTransformerTest.scala index 46734909..307cc4fa 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableCellTransformerTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableCellTransformerTest.scala @@ -1,8 +1,8 @@ package io.cucumber.scala import io.cucumber.core.backend._ -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test class ScalaDslDefaultDataTableCellTransformerTest { diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableEntryTransformerTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableEntryTransformerTest.scala index 72fd2e92..9ff5a265 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableEntryTransformerTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableEntryTransformerTest.scala @@ -1,8 +1,8 @@ package io.cucumber.scala import io.cucumber.core.backend._ -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test import scala.jdk.CollectionConverters._ diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultParameterTransformerTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultParameterTransformerTest.scala index 5cfef2cd..158bf63d 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultParameterTransformerTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultParameterTransformerTest.scala @@ -1,8 +1,8 @@ package io.cucumber.scala import io.cucumber.core.backend._ -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test class ScalaDslDefaultParameterTransformerTest { diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDocStringTypeTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDocStringTypeTest.scala index 3a89c1e3..55628878 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDocStringTypeTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDocStringTypeTest.scala @@ -1,7 +1,7 @@ package io.cucumber.scala import io.cucumber.core.backend._ -import org.junit.Test +import org.junit.jupiter.api.Test import scala.annotation.nowarn diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslHooksTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslHooksTest.scala index 3bd7dd6a..21d8188c 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslHooksTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslHooksTest.scala @@ -1,8 +1,8 @@ package io.cucumber.scala import io.cucumber.core.backend._ -import org.junit.Assert.{assertEquals, assertTrue} -import org.junit.{Before, Test} +import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue} +import org.junit.jupiter.api.{BeforeEach, Test} import org.mockito.Mockito.mock import java.util.concurrent.atomic.AtomicBoolean @@ -19,7 +19,7 @@ class ScalaDslHooksTest { invoked.set(true) } - @Before + @BeforeEach def beforeEach(): Unit = { // Reset the invoked flag invoked.set(false) diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslParameterTypeTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslParameterTypeTest.scala index 2d4b2366..7b72a16f 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslParameterTypeTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslParameterTypeTest.scala @@ -2,8 +2,8 @@ package io.cucumber.scala import io.cucumber.core.backend._ import io.cucumber.scala.ScalaDslParameterTypeTest.Point -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test import scala.jdk.CollectionConverters._ diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaSnippetTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaSnippetTest.scala index 06eddc93..7c948031 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaSnippetTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/ScalaSnippetTest.scala @@ -11,8 +11,8 @@ import io.cucumber.cucumberexpressions.{ ParameterTypeRegistry, TypeReference } -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test import scala.jdk.CollectionConverters._ diff --git a/cucumber-scala/src/test/scala/io/cucumber/scala/StepableTest.scala b/cucumber-scala/src/test/scala/io/cucumber/scala/StepableTest.scala index 73473b6a..d8ff256a 100644 --- a/cucumber-scala/src/test/scala/io/cucumber/scala/StepableTest.scala +++ b/cucumber-scala/src/test/scala/io/cucumber/scala/StepableTest.scala @@ -1,8 +1,8 @@ package io.cucumber.scala import io.cucumber.datatable.DataTable -import org.junit.Assert.{assertEquals, assertTrue} -import org.junit.Test +import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue} +import org.junit.jupiter.api.Test import java.lang.reflect.{ParameterizedType => JavaParameterizedType} import java.util.{List => JavaList, Map => JavaMap} diff --git a/docs/usage.md b/docs/usage.md index b80234e0..6c7a8983 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -85,6 +85,51 @@ To make it work, you only need a Cucumber DI module to be added as a dependency See also the Running Cucumber for Java [documentation](https://docs.cucumber.io/docs/cucumber/api/#running-cucumber). +### JUnit 5 + +Add the `cucumber-junit-platform-engine` dependency to your project. + +Then create a runner class like this: +```scala +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api._ + +@Suite +@IncludeEngines(Array("cucumber")) // Mandatory to load Cucumber engine +@SelectPackages(Array("cucumber.examples.scalacalculator")) // Load all *.feature files in the given package +// @SelectClasspathResource("cucumber/examples/scalacalculator/basic_arithmetic.feature") // Or, load a single feature file +@ConfigurationParameter( // Set packages in which to look for glue code (classes containing steps definition) + key = Constants.GLUE_PROPERTY_NAME, + value = "cucumber.examples.scalacalculator" +) +class RunCucumberTest +``` + +Cucumber plugins can be added in the `junit-platform.properties` file (must be in the test resources classpath, +usually `src/test/resources`): +```properties +cucumber.plugin=pretty +``` + +#### Additional settings if using SBT + +You need to enable the support of JUnit 5 in SBT: +```scala +// plugins.sbt +addSbtPlugin("com.github.sbt.junit" % "sbt-jupiter-interface" % "0.15.0") +// build.sbt +libraryDependencies += "com.github.sbt.junit" % "jupiter-interface" % JupiterKeys.jupiterVersion.value % Test +``` + +And, because of an [issue in the SBT integration](https://github.com/sbt/sbt-jupiter-interface/issues/142), you need to +set the following property in the `junit-platform.properties` file (must be in the test resources classpath, usually +`src/test/resources`): +```properties +cucumber.junit-platform.discovery.as-root-engine=false +``` + +### JUnit 4 + Add the `cucumber-junit` dependency to your project. Then create a runner class like this: @@ -97,6 +142,7 @@ import org.junit.runner.RunWith class RunCucumberTest ``` -You can define several options like: +You can define several options via the `@CucumberOptions` parameters like: - the "glue path" (default to current package): packages in which to look for glue code - the "features path" (default to current folder): folder in which to look for features file +- some plugins diff --git a/examples/README.md b/examples/examples-junit4/README.md similarity index 50% rename from examples/README.md rename to examples/examples-junit4/README.md index 3205d4e0..c8fc86e7 100644 --- a/examples/README.md +++ b/examples/examples-junit4/README.md @@ -1,3 +1,3 @@ -# Cucumber Scala Example +# Cucumber Scala Example - JUnit 4 -This project is an example of Cucumber Scala integration in a Scala Maven project. +This project is an example of Cucumber Scala integration in a Scala SBT project with JUnit 4. diff --git a/examples/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala b/examples/examples-junit4/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala similarity index 100% rename from examples/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala rename to examples/examples-junit4/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala diff --git a/examples/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature b/examples/examples-junit4/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature similarity index 100% rename from examples/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature rename to examples/examples-junit4/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature diff --git a/examples/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala b/examples/examples-junit4/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala similarity index 100% rename from examples/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala rename to examples/examples-junit4/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala diff --git a/examples/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala b/examples/examples-junit4/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala similarity index 67% rename from examples/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala rename to examples/examples-junit4/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala index 4c7a51ea..0ba815c8 100644 --- a/examples/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala +++ b/examples/examples-junit4/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala @@ -3,6 +3,9 @@ package cucumber.examples.scalacalculator import io.cucumber.junit.{Cucumber, CucumberOptions} import org.junit.runner.RunWith +import scala.annotation.nowarn + +@nowarn @RunWith(classOf[Cucumber]) -@CucumberOptions() +@CucumberOptions(plugin = Array("pretty")) class RunCukesTest diff --git a/examples/examples-junit5/README.md b/examples/examples-junit5/README.md new file mode 100644 index 00000000..343e548a --- /dev/null +++ b/examples/examples-junit5/README.md @@ -0,0 +1,3 @@ +# Cucumber Scala Example - JUnit 5 + +This project is an example of Cucumber Scala integration in a Scala SBT project with JUnit 5. diff --git a/examples/examples-junit5/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala b/examples/examples-junit5/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala new file mode 100644 index 00000000..3e038d48 --- /dev/null +++ b/examples/examples-junit5/src/main/scala/cucumber/examples/scalacalculator/RpnCalculator.scala @@ -0,0 +1,34 @@ +package cucumber.examples.scalacalculator + +import scala.collection.mutable.Queue + +sealed trait Arg + +object Arg { + implicit def op(s: String): Op = Op(s) + implicit def value(v: Double): Val = Val(v) +} + +case class Op(value: String) extends Arg +case class Val(value: Double) extends Arg + +class RpnCalculator { + private val stack = Queue.empty[Double] + + private def op(f: (Double, Double) => Double) = + stack += f(stack.dequeue(), stack.dequeue()) + + def push(arg: Arg): Unit = { + arg match { + case Op("+") => op(_ + _) + case Op("-") => op(_ - _) + case Op("*") => op(_ * _) + case Op("/") => op(_ / _) + case Val(value) => stack += value + case _ => () + } + () + } + + def value: Double = stack.head +} diff --git a/examples/examples-junit5/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature b/examples/examples-junit5/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature new file mode 100644 index 00000000..42034dd0 --- /dev/null +++ b/examples/examples-junit5/src/test/resources/cucumber/examples/scalacalculator/basic_arithmetic.feature @@ -0,0 +1,7 @@ +@foo +Feature: Basic Arithmetic + + Scenario: Adding + # Try to change one of the values below to provoke a failure + When I add 4.0 and 5.0 + Then the result is 9.0 diff --git a/examples/examples-junit5/src/test/resources/junit-platform.properties b/examples/examples-junit5/src/test/resources/junit-platform.properties new file mode 100644 index 00000000..f6b3ffc4 --- /dev/null +++ b/examples/examples-junit5/src/test/resources/junit-platform.properties @@ -0,0 +1,4 @@ +cucumber.plugin=pretty +# Workaround for https://github.com/sbt/sbt-jupiter-interface/issues/142 +# See also https://github.com/cucumber/cucumber-jvm/pull/3023 +cucumber.junit-platform.discovery.as-root-engine=false \ No newline at end of file diff --git a/examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala b/examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala new file mode 100644 index 00000000..080a93df --- /dev/null +++ b/examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RpnCalculatorStepDefinitions.scala @@ -0,0 +1,23 @@ +package cucumber.examples.scalacalculator + +import io.cucumber.scala.{EN, ScalaDsl, Scenario} +import org.junit.jupiter.api.Assertions.assertEquals + +class RpnCalculatorStepDefinitions extends ScalaDsl with EN { + + val calc = new RpnCalculator + + When("""I add {double} and {double}""") { (arg1: Double, arg2: Double) => + calc push arg1 + calc push arg2 + calc push "+" + } + + Then("the result is {double}") { (expected: Double) => + assertEquals(expected, calc.value, 0.001) + } + + Before("not @foo") { (scenario: Scenario) => + println(s"Runs before scenarios *not* tagged with @foo (${scenario.getId})") + } +} diff --git a/examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala b/examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala new file mode 100644 index 00000000..2290acad --- /dev/null +++ b/examples/examples-junit5/src/test/scala/cucumber/examples/scalacalculator/RunCukesTest.scala @@ -0,0 +1,13 @@ +package cucumber.examples.scalacalculator + +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api._ + +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("cucumber.examples.scalacalculator")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "cucumber.examples.scalacalculator" +) +class RunCukesTest diff --git a/integration-tests/common/src/test/resources/cucumber.properties b/integration-tests/common/src/test/resources/cucumber.properties deleted file mode 100644 index aa51b352..00000000 --- a/integration-tests/common/src/test/resources/cucumber.properties +++ /dev/null @@ -1 +0,0 @@ -cucumber.publish.quiet=true \ No newline at end of file diff --git a/integration-tests/common/src/test/resources/junit-platform.properties b/integration-tests/common/src/test/resources/junit-platform.properties new file mode 100644 index 00000000..d756c5ba --- /dev/null +++ b/integration-tests/common/src/test/resources/junit-platform.properties @@ -0,0 +1,3 @@ +# Workaround for https://github.com/sbt/sbt-jupiter-interface/issues/142 +# See also https://github.com/cucumber/cucumber-jvm/pull/3023 +cucumber.junit-platform.discovery.as-root-engine=false \ No newline at end of file diff --git a/integration-tests/common/src/test/scala/cukes/RunCukesTest.scala b/integration-tests/common/src/test/scala/cukes/RunCukesTest.scala index 9e7a7160..f85b18f5 100644 --- a/integration-tests/common/src/test/scala/cukes/RunCukesTest.scala +++ b/integration-tests/common/src/test/scala/cukes/RunCukesTest.scala @@ -1,8 +1,13 @@ package cukes -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api._ -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("cukes")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "cukes" +) class RunCukesTest diff --git a/integration-tests/common/src/test/scala/cukes/StepDefs.scala b/integration-tests/common/src/test/scala/cukes/StepDefs.scala index dbca4ad1..d4862377 100644 --- a/integration-tests/common/src/test/scala/cukes/StepDefs.scala +++ b/integration-tests/common/src/test/scala/cukes/StepDefs.scala @@ -5,7 +5,7 @@ import java.util.{List => JList, Map => JMap} import io.cucumber.datatable.DataTable import io.cucumber.scala.{EN, ScalaDsl} -import org.junit.Assert.assertEquals +import org.junit.jupiter.api.Assertions.assertEquals import scala.annotation.nowarn import scala.jdk.CollectionConverters._ diff --git a/integration-tests/common/src/test/scala/datatables/RunDatatablesTest.scala b/integration-tests/common/src/test/scala/datatables/RunDatatablesTest.scala index c41f64b6..689f7e0f 100644 --- a/integration-tests/common/src/test/scala/datatables/RunDatatablesTest.scala +++ b/integration-tests/common/src/test/scala/datatables/RunDatatablesTest.scala @@ -1,8 +1,18 @@ package datatables -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("datatables")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "datatables" +) class RunDatatablesTest diff --git a/integration-tests/common/src/test/scala/docstring/RunDocStringTest.scala b/integration-tests/common/src/test/scala/docstring/RunDocStringTest.scala index 3ade66a4..652412bb 100644 --- a/integration-tests/common/src/test/scala/docstring/RunDocStringTest.scala +++ b/integration-tests/common/src/test/scala/docstring/RunDocStringTest.scala @@ -1,8 +1,18 @@ package docstring -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("docstring")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "docstring" +) class RunDocStringTest diff --git a/integration-tests/common/src/test/scala/isolated/RunIsolatedTest.scala b/integration-tests/common/src/test/scala/isolated/RunIsolatedTest.scala index bc2e3d48..3812a2af 100644 --- a/integration-tests/common/src/test/scala/isolated/RunIsolatedTest.scala +++ b/integration-tests/common/src/test/scala/isolated/RunIsolatedTest.scala @@ -1,8 +1,18 @@ package isolated -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("isolated")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "isolated" +) class RunIsolatedTest diff --git a/integration-tests/common/src/test/scala/misc/RunMiscTest.scala b/integration-tests/common/src/test/scala/misc/RunMiscTest.scala index f5402b82..595dbe35 100644 --- a/integration-tests/common/src/test/scala/misc/RunMiscTest.scala +++ b/integration-tests/common/src/test/scala/misc/RunMiscTest.scala @@ -1,8 +1,18 @@ package misc -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("misc")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "misc" +) class RunMiscTest diff --git a/integration-tests/common/src/test/scala/object/ObjectSteps.scala b/integration-tests/common/src/test/scala/object/ObjectSteps.scala index 88266fc1..746319ef 100644 --- a/integration-tests/common/src/test/scala/object/ObjectSteps.scala +++ b/integration-tests/common/src/test/scala/object/ObjectSteps.scala @@ -1,7 +1,7 @@ package `object` import io.cucumber.scala.{EN, ScalaDsl} -import org.junit.Assert.assertEquals +import org.junit.jupiter.api.Assertions.assertEquals import scala.annotation.nowarn diff --git a/integration-tests/common/src/test/scala/object/RunObjectTest.scala b/integration-tests/common/src/test/scala/object/RunObjectTest.scala index 183f361f..5d1f820f 100644 --- a/integration-tests/common/src/test/scala/object/RunObjectTest.scala +++ b/integration-tests/common/src/test/scala/object/RunObjectTest.scala @@ -1,8 +1,18 @@ package `object` -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("object")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "object" +) class RunObjectTest diff --git a/integration-tests/common/src/test/scala/parametertypes/RunParameterTypesTest.scala b/integration-tests/common/src/test/scala/parametertypes/RunParameterTypesTest.scala index b7834d1b..d7626891 100644 --- a/integration-tests/common/src/test/scala/parametertypes/RunParameterTypesTest.scala +++ b/integration-tests/common/src/test/scala/parametertypes/RunParameterTypesTest.scala @@ -1,8 +1,18 @@ package parametertypes -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("parametertypes")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "parametertypes" +) class RunParameterTypesTest diff --git a/integration-tests/common/src/test/scala/statichooks/RunStaticHooksTest.scala b/integration-tests/common/src/test/scala/statichooks/RunStaticHooksTest.scala index 8370ec5b..1bbb105a 100644 --- a/integration-tests/common/src/test/scala/statichooks/RunStaticHooksTest.scala +++ b/integration-tests/common/src/test/scala/statichooks/RunStaticHooksTest.scala @@ -1,31 +1,41 @@ package statichooks -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.{AfterClass, BeforeClass} -import org.junit.Assert.assertEquals -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.{AfterAll, BeforeAll} +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("statichooks")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "statichooks" +) class RunStaticHooksTest object RunStaticHooksTest { - @BeforeClass + @BeforeAll def beforeAllJunit(): Unit = { assertEquals( - "Before Cucumber's BeforeAll", 0L, - StaticHooksSteps.countBeforeAll.toLong + StaticHooksSteps.countBeforeAll.toLong, + "Before Cucumber's BeforeAll" ) } - @AfterClass + @AfterAll def afterAllJunit(): Unit = { assertEquals( - "After Cucumber's AfterAll", 1L, - StaticHooksSteps.countAfterAll.toLong + StaticHooksSteps.countAfterAll.toLong, + "After Cucumber's AfterAll" ) } diff --git a/integration-tests/common/src/test/scala/statichooks/StaticHooksSteps.scala b/integration-tests/common/src/test/scala/statichooks/StaticHooksSteps.scala index 9e04f84c..2e9875b2 100644 --- a/integration-tests/common/src/test/scala/statichooks/StaticHooksSteps.scala +++ b/integration-tests/common/src/test/scala/statichooks/StaticHooksSteps.scala @@ -1,7 +1,7 @@ package statichooks import io.cucumber.scala.{EN, ScalaDsl} -import org.junit.Assert.assertEquals +import org.junit.jupiter.api.Assertions.assertEquals import scala.annotation.nowarn diff --git a/integration-tests/jackson/src/test/resources/cucumber.properties b/integration-tests/jackson/src/test/resources/cucumber.properties deleted file mode 100644 index aa51b352..00000000 --- a/integration-tests/jackson/src/test/resources/cucumber.properties +++ /dev/null @@ -1 +0,0 @@ -cucumber.publish.quiet=true \ No newline at end of file diff --git a/integration-tests/jackson/src/test/resources/junit-platform.properties b/integration-tests/jackson/src/test/resources/junit-platform.properties new file mode 100644 index 00000000..d756c5ba --- /dev/null +++ b/integration-tests/jackson/src/test/resources/junit-platform.properties @@ -0,0 +1,3 @@ +# Workaround for https://github.com/sbt/sbt-jupiter-interface/issues/142 +# See also https://github.com/cucumber/cucumber-jvm/pull/3023 +cucumber.junit-platform.discovery.as-root-engine=false \ No newline at end of file diff --git a/integration-tests/jackson/src/test/scala/jackson/RunJacksonTest.scala b/integration-tests/jackson/src/test/scala/jackson/RunJacksonTest.scala index 6b3cf886..0e8a90cf 100644 --- a/integration-tests/jackson/src/test/scala/jackson/RunJacksonTest.scala +++ b/integration-tests/jackson/src/test/scala/jackson/RunJacksonTest.scala @@ -1,8 +1,18 @@ package jackson -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("jackson")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "jackson" +) class RunJacksonTest diff --git a/integration-tests/picocontainer/src/test/resources/cucumber.properties b/integration-tests/picocontainer/src/test/resources/cucumber.properties deleted file mode 100644 index aa51b352..00000000 --- a/integration-tests/picocontainer/src/test/resources/cucumber.properties +++ /dev/null @@ -1 +0,0 @@ -cucumber.publish.quiet=true \ No newline at end of file diff --git a/integration-tests/picocontainer/src/test/resources/junit-platform.properties b/integration-tests/picocontainer/src/test/resources/junit-platform.properties new file mode 100644 index 00000000..d756c5ba --- /dev/null +++ b/integration-tests/picocontainer/src/test/resources/junit-platform.properties @@ -0,0 +1,3 @@ +# Workaround for https://github.com/sbt/sbt-jupiter-interface/issues/142 +# See also https://github.com/cucumber/cucumber-jvm/pull/3023 +cucumber.junit-platform.discovery.as-root-engine=false \ No newline at end of file diff --git a/integration-tests/picocontainer/src/test/scala/di/RunDependencyInjectionTest.scala b/integration-tests/picocontainer/src/test/scala/di/RunDependencyInjectionTest.scala index ba21ef30..9ca721d7 100644 --- a/integration-tests/picocontainer/src/test/scala/di/RunDependencyInjectionTest.scala +++ b/integration-tests/picocontainer/src/test/scala/di/RunDependencyInjectionTest.scala @@ -1,8 +1,18 @@ package di -import io.cucumber.junit.{Cucumber, CucumberOptions} -import org.junit.runner.RunWith +import io.cucumber.junit.platform.engine.Constants +import org.junit.platform.suite.api.{ + ConfigurationParameter, + IncludeEngines, + SelectPackages, + Suite +} -@RunWith(classOf[Cucumber]) -@CucumberOptions() +@Suite +@IncludeEngines(Array("cucumber")) +@SelectPackages(Array("di")) +@ConfigurationParameter( + key = Constants.GLUE_PROPERTY_NAME, + value = "di" +) class RunDependencyInjectionTest diff --git a/project/plugins.sbt b/project/plugins.sbt index 90d76ef2..c1c82986 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -13,3 +13,6 @@ addSbtPlugin("com.github.sbt" % "sbt-release" % "1.4.0") // Publishing addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.12.2") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.3.1") + +// Junit 5 +addSbtPlugin("com.github.sbt.junit" % "sbt-jupiter-interface" % "0.15.0")