sbt / sbt-jupiter-interface

Implementation of sbt's test interface for JUnit 5's Jupiter module
Apache License 2.0
33 stars 18 forks source link

Fix Suite support #87

Closed eed3si9n closed 2 months ago

eed3si9n commented 3 months ago

Fixes https://github.com/sbt/sbt-jupiter-interface/issues/54

This cherry picks the Suite support from @Nezisi's https://github.com/Nezisi/sbt-jupiter-interface/compare/bump-sbt-1_8...Nezisi:sbt-jupiter-interface:fix-junit5-suite-support branch.

vasilmkd commented 3 months ago

I understand if the original intention of the fix for @Suite was to only fix JUnit 4 suites. I only wish to provide some feedback about other cases.

The JUnit 3 TestSuite is still not fixed by this PR (I did a publishLocal). It still produces: [error] java.lang.RuntimeException: Test class MathTest is not enclosed by MathSuite for the following test sources.

// src/test/MathTest.scala
// This is a definition of a JUnit 3 test case. Many of these test cases will be "dynamically" collected into a JUnit 3 `TestSuite` and run.

class MathTest(op1: Int, op2: Int, res: Int) extends TestCase(s"$op1 + $op2 = $res") {
  final override def runTest(): Unit = {
    assertEquals(res, op1 + op2)
  }
}
// src/test/MathSuite.scala

class MathSuite extends TestCase

object MathSuite {
  // This is essentially a Scala 2.12+ hack, where methods on the companion object produce static forwarders on the class.
  // This is the Scala equivalent of the JUnit 3 convention public static Test suite() { ... }
  def suite(): Test = {
    val s = new TestSuite("MathSuite")
    s.addTest(new MathTest(1, 2, 3))
    s.addTest(new MathTest(2, 3, 4))
    s
  }
}
eed3si9n commented 3 months ago

@vasilmkd I've split the above comment into a new issue - https://github.com/sbt/sbt-jupiter-interface/issues/89