Skip to content

Commit 36bf24e

Browse files
committed
🧹 chore: use JUnit 5
In our internal tests + examples + integration tests
1 parent 2007919 commit 36bf24e

File tree

47 files changed

+377
-103
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+377
-103
lines changed

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,23 @@ See also the [CHANGELOG](https://github.com/cucumber/cucumber-jvm/blob/master/CH
99
----
1010
## [Unreleased] (In Git)
1111

12+
📢 As of cucumber JVM 7.24, `cucumber-junit` (JUnit 4) is deprecated in favour of `cucumber-junit-platform-engine`
13+
(JUnit 5). Users are strongly encouraged to use the latter.
14+
15+
Read the "Run" section in [Basic usage](docs/usage.md) to see examples of Cucumber + JUnit 5.
16+
17+
⚠️ `cucumber-junit-platform-engine` 7.26+ is required when using SBT, lower versions will run Cucumber tests twice and
18+
fail with runtime errors due to [a bug in the SBT/JUnit 5 interface](https://github.com/sbt/sbt-jupiter-interface/issues/142).
19+
1220
### Added
1321

22+
- [Documentation] Integration with JUnit 5
23+
1424
### Changed
1525

26+
- [Core] Update `cucumber-core` dependency to [7.26.0](https://github.com/cucumber/cucumber-jvm/blob/main/CHANGELOG.md)
27+
- [Internal] Update integration tests to use JUnit 5
28+
1629
### Deprecated
1730

1831
### Removed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ See: https://cucumber.io/support
1212
## Compatibility matrix
1313

1414
Cucumber Scala has a different release cycle than other Cucumber projects that you might use
15-
(like _cucumber-junit_).
15+
(like _cucumber-junit-platform-engine_).
1616

1717
As a rule of thumb, you can assume that latest version of Cucumber Scala targets the latest version
1818
of Cucumber Core projects.

build.sbt

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,16 @@ scalaVersion := scala213
3939

4040
// Library versions
4141

42-
val cucumberVersion = "7.23.0"
42+
val cucumberVersion = "7.26.0"
4343
val jacksonVersion = "2.19.1"
4444
val mockitoScalaVersion = "1.17.45"
4545
val junitVersion = "4.13.2"
46+
val junitJupiterVersion = "5.13.3"
47+
val junitPlatformVersion = "1.13.3"
4648

4749
// Projects and settings
4850

4951
lazy val commonSettings = Seq(
50-
libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test,
5152
scalacOptions ++= {
5253
CrossVersion.partialVersion(scalaVersion.value) match {
5354
case Some((2, 12)) => ScalacOptions.scalacOptions212
@@ -58,6 +59,13 @@ lazy val commonSettings = Seq(
5859
}
5960
)
6061

62+
lazy val junit4SbtSupport = Seq(
63+
libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test
64+
)
65+
lazy val junit5SbtSupport = Seq(
66+
libraryDependencies += "com.github.sbt.junit" % "jupiter-interface" % JupiterKeys.jupiterVersion.value % Test
67+
)
68+
6169
lazy val root = (project in file("."))
6270
.settings(commonSettings)
6371
.settings(
@@ -68,19 +76,21 @@ lazy val root = (project in file("."))
6876
integrationTestsCommon.projectRefs ++
6977
integrationTestsJackson.projectRefs ++
7078
integrationTestsPicoContainer.projectRefs ++
71-
examples.projectRefs: _*
79+
examplesJunit4.projectRefs ++
80+
examplesJunit5.projectRefs: _*
7281
)
7382

7483
// Main project
7584
lazy val cucumberScala = (projectMatrix in file("cucumber-scala"))
7685
.settings(commonSettings)
86+
.settings(junit5SbtSupport)
7787
.settings(
7888
name := "cucumber-scala",
7989
libraryDependencies ++= Seq(
8090
"io.cucumber" % "cucumber-core" % cucumberVersion,
8191
// Users have to provide it (for JacksonDefaultDataTableTransformer)
8292
"com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion % Provided,
83-
"junit" % "junit" % junitVersion % Test,
93+
"org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test,
8494
("org.mockito" %% "mockito-scala" % mockitoScalaVersion % Test)
8595
.cross(CrossVersion.for3Use2_13)
8696
),
@@ -127,11 +137,13 @@ lazy val cucumberScala = (projectMatrix in file("cucumber-scala"))
127137
lazy val integrationTestsCommon =
128138
(projectMatrix in file("integration-tests/common"))
129139
.settings(commonSettings)
140+
.settings(junit5SbtSupport)
130141
.settings(
131142
name := "integration-tests-common",
132143
libraryDependencies ++= Seq(
133-
"junit" % "junit" % junitVersion % Test,
134-
"io.cucumber" % "cucumber-junit" % cucumberVersion % Test
144+
"org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test,
145+
"org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test,
146+
"io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test
135147
),
136148
publishArtifact := false
137149
)
@@ -141,11 +153,13 @@ lazy val integrationTestsCommon =
141153
lazy val integrationTestsJackson =
142154
(projectMatrix in file("integration-tests/jackson"))
143155
.settings(commonSettings)
156+
.settings(junit5SbtSupport)
144157
.settings(
145158
name := "integration-tests-jackson",
146159
libraryDependencies ++= Seq(
147-
"junit" % "junit" % junitVersion % Test,
148-
"io.cucumber" % "cucumber-junit" % cucumberVersion % Test,
160+
"org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test,
161+
"org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test,
162+
"io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test,
149163
"com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion % Test
150164
),
151165
publishArtifact := false
@@ -156,11 +170,13 @@ lazy val integrationTestsJackson =
156170
lazy val integrationTestsPicoContainer =
157171
(projectMatrix in file("integration-tests/picocontainer"))
158172
.settings(commonSettings)
173+
.settings(junit5SbtSupport)
159174
.settings(
160175
name := "integration-tests-picocontainer",
161176
libraryDependencies ++= Seq(
162-
"junit" % "junit" % junitVersion % Test,
163-
"io.cucumber" % "cucumber-junit" % cucumberVersion % Test,
177+
"org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test,
178+
"org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test,
179+
"io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test,
164180
"io.cucumber" % "cucumber-picocontainer" % cucumberVersion % Test
165181
),
166182
publishArtifact := false
@@ -169,8 +185,9 @@ lazy val integrationTestsPicoContainer =
169185
.jvmPlatform(scalaVersions = Seq(scala3, scala213, scala212))
170186

171187
// Examples project
172-
lazy val examples = (projectMatrix in file("examples"))
188+
lazy val examplesJunit4 = (projectMatrix in file("examples/examples-junit4"))
173189
.settings(commonSettings)
190+
.settings(junit4SbtSupport)
174191
.settings(
175192
name := "scala-examples",
176193
libraryDependencies ++= Seq(
@@ -182,6 +199,21 @@ lazy val examples = (projectMatrix in file("examples"))
182199
.dependsOn(cucumberScala % Test)
183200
.jvmPlatform(scalaVersions = Seq(scala3, scala213, scala212))
184201

202+
lazy val examplesJunit5 = (projectMatrix in file("examples/examples-junit5"))
203+
.settings(commonSettings)
204+
.settings(junit5SbtSupport)
205+
.settings(
206+
name := "scala-examples",
207+
libraryDependencies ++= Seq(
208+
"io.cucumber" % "cucumber-junit-platform-engine" % cucumberVersion % Test,
209+
"org.junit.jupiter" % "junit-jupiter" % junitJupiterVersion % Test,
210+
"org.junit.platform" % "junit-platform-suite" % junitPlatformVersion % Test
211+
),
212+
publishArtifact := false
213+
)
214+
.dependsOn(cucumberScala % Test)
215+
.jvmPlatform(scalaVersions = Seq(scala3, scala213, scala212))
216+
185217
// Version policy check
186218

187219
ThisBuild / versionScheme := Some("early-semver")
@@ -204,12 +236,12 @@ releaseProcess := Seq[ReleaseStep](
204236
runTest,
205237
setReleaseVersion,
206238
// the 2 following steps are part of the Cucumber release process
207-
//commitReleaseVersion,
208-
//tagRelease,
239+
// commitReleaseVersion,
240+
// tagRelease,
209241
releaseStepCommandAndRemaining("publishSigned"),
210242
releaseStepCommand("sonatypeBundleRelease"),
211243
setNextVersion
212244
// the 2 following steps are part of the Cucumber release process
213-
//commitNextVersion,
214-
//pushChanges
245+
// commitNextVersion,
246+
// pushChanges
215247
)

cucumber-scala/src/test/scala-2/io/cucumber/scala/ScalaDslStepsTest.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.cucumber.scala
22

33
import io.cucumber.core.backend._
4-
import org.junit.Assert.{assertEquals, assertTrue}
5-
import org.junit.Test
4+
import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue}
5+
import org.junit.jupiter.api.Test
66

77
import scala.annotation.nowarn
88
import scala.util.Try
@@ -339,8 +339,8 @@ class ScalaDslStepsTest {
339339
// The result is different between Scala versions, that's why we don't check it precisely
340340
// assertEquals("$anonfun$can_provide_location_of_step$1", matched.getMethodName)
341341
assertTrue(
342-
s"${matched.getClassName} did not contain $exceptionClassName",
343-
matched.getClassName.contains(exceptionClassName)
342+
matched.getClassName.contains(exceptionClassName),
343+
s"${matched.getClassName} did not contain $exceptionClassName"
344344
)
345345
assertEquals(exceptionFile, matched.getFileName)
346346
assertEquals(exceptionLine, matched.getLineNumber)

cucumber-scala/src/test/scala-3/io/cucumber/scala/ScalaDslStepsTest.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.cucumber.scala
22

33
import io.cucumber.core.backend._
4-
import org.junit.Assert.{assertEquals, assertTrue}
5-
import org.junit.Test
4+
import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue}
5+
import org.junit.jupiter.api.Test
66

77
import scala.annotation.nowarn
88
import scala.util.Try
@@ -338,8 +338,8 @@ class ScalaDslStepsTest {
338338

339339
// The result is different between Scala versions, that's why we don't check it precisely
340340
assertTrue(
341-
s"$matched did not contain $exceptionClassName",
342-
matched.toString.contains(exceptionClassName)
341+
matched.toString.contains(exceptionClassName),
342+
s"$matched did not contain $exceptionClassName"
343343
)
344344
assertEquals(exceptionFile, matched.getFileName)
345345
assertEquals(exceptionLine, matched.getLineNumber)

cucumber-scala/src/test/scala/io/cucumber/scala/ScalaBackendTest.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import io.cucumber.scala.steps.errors.incorrectclasshooks.IncorrectClassHooksDef
77
import io.cucumber.scala.steps.errors.staticclasshooks.StaticClassHooksDefinition
88
import io.cucumber.scala.steps.objects.StepsInObject
99
import io.cucumber.scala.steps.traits.StepsInTrait
10-
import org.junit.Assert.{assertEquals, assertTrue, fail}
11-
import org.junit.{Before, Test}
10+
import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue, fail}
11+
import org.junit.jupiter.api.{BeforeEach, Test}
1212
import org.mockito.ArgumentMatchers.any
1313
import org.mockito.Mockito._
1414

@@ -30,7 +30,7 @@ class ScalaBackendTest {
3030

3131
private var backend: ScalaBackend = _
3232

33-
@Before
33+
@BeforeEach
3434
def beforeEach(): Unit = {
3535
// Reset mocks
3636
reset(fakeGlue, fakeLookup, fakeContainer)

cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDataTableTypeTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package io.cucumber.scala
22

33
import io.cucumber.datatable.DataTable
44
import io.cucumber.scala.ScalaDslDataTableTypeTest.{Author, Cell, GroupOfAuthor}
5-
import org.junit.Assert.assertEquals
6-
import org.junit.Test
5+
import org.junit.jupiter.api.Assertions.assertEquals
6+
import org.junit.jupiter.api.Test
77

88
import scala.jdk.CollectionConverters._
99

cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableCellTransformerTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.cucumber.scala
22

33
import io.cucumber.core.backend._
4-
import org.junit.Assert.assertEquals
5-
import org.junit.Test
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Test
66

77
class ScalaDslDefaultDataTableCellTransformerTest {
88

cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultDataTableEntryTransformerTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.cucumber.scala
22

33
import io.cucumber.core.backend._
4-
import org.junit.Assert.assertEquals
5-
import org.junit.Test
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Test
66

77
import scala.jdk.CollectionConverters._
88

cucumber-scala/src/test/scala/io/cucumber/scala/ScalaDslDefaultParameterTransformerTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.cucumber.scala
22

33
import io.cucumber.core.backend._
4-
import org.junit.Assert.assertEquals
5-
import org.junit.Test
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Test
66

77
class ScalaDslDefaultParameterTransformerTest {
88

0 commit comments

Comments
 (0)