diff --git a/munit/shared/src/main/scala/munit/MUnitRunner.scala b/munit/shared/src/main/scala/munit/MUnitRunner.scala index 16081c7f..37d70e3e 100644 --- a/munit/shared/src/main/scala/munit/MUnitRunner.scala +++ b/munit/shared/src/main/scala/munit/MUnitRunner.scala @@ -45,19 +45,25 @@ class MUnitRunner(val cls: Class[_ <: Suite], newInstance: () => Suite) private lazy val munitTests: mutable.ArrayBuffer[Test] = mutable.ArrayBuffer[Test](suite.munitTests(): _*) - private val suiteFixture = new Fixture[Unit](cls.getName()) { + + // Suite fixtures are implemented as regular fixtures + // We split up the before*/after* methods so we can order them explicitly + private val suiteFixtureBefore = new Fixture[Unit](cls.getName()) { def apply(): Unit = () override def beforeAll(): Unit = suite.beforeAll() override def beforeEach(context: BeforeEach): Unit = suite.beforeEach(context) + } + private val suiteFixtureAfter = new Fixture[Unit](cls.getName()) { + def apply(): Unit = () override def afterEach(context: AfterEach): Unit = suite.afterEach(context) override def afterAll(): Unit = suite.afterAll() } private lazy val munitFixtures: List[AnyFixture[_]] = - suiteFixture :: suite.munitFixtures.toList + suiteFixtureBefore :: suite.munitFixtures.appended(suiteFixtureAfter).toList override def filter(filter: Filter): Unit = { val newTests = munitTests.filter { t => diff --git a/tests/shared/src/main/scala/munit/FixtureOrderFrameworkSuite.scala b/tests/shared/src/main/scala/munit/FixtureOrderFrameworkSuite.scala index ef1fdcd0..2f1d3465 100644 --- a/tests/shared/src/main/scala/munit/FixtureOrderFrameworkSuite.scala +++ b/tests/shared/src/main/scala/munit/FixtureOrderFrameworkSuite.scala @@ -53,29 +53,29 @@ object FixtureOrderFrameworkSuite |beforeEach(a, 1) |beforeEach(b, 1) |test(1) - |afterEach(ad-hoc, 1) |afterEach(a, 1) |afterEach(b, 1) + |afterEach(ad-hoc, 1) | + 1 |beforeEach(ad-hoc, 2) |beforeEach(a, 2) |beforeEach(b, 2) |test(2) - |afterEach(ad-hoc, 2) |afterEach(a, 2) |afterEach(b, 2) + |afterEach(ad-hoc, 2) | + 2 |beforeEach(ad-hoc, 3) |beforeEach(a, 3) |beforeEach(b, 3) |test(3) - |afterEach(ad-hoc, 3) |afterEach(a, 3) |afterEach(b, 3) + |afterEach(ad-hoc, 3) | + 3 - |afterAll(ad-hoc) |afterAll(a) |afterAll(b) + |afterAll(ad-hoc) |""".stripMargin, format = StdoutFormat ) diff --git a/tests/shared/src/test/scala/munit/SuiteLocalFixtureSuite.scala b/tests/shared/src/test/scala/munit/SuiteLocalFixtureSuite.scala index 306731dc..bbf37e0d 100644 --- a/tests/shared/src/test/scala/munit/SuiteLocalFixtureSuite.scala +++ b/tests/shared/src/test/scala/munit/SuiteLocalFixtureSuite.scala @@ -12,7 +12,7 @@ class SuiteLocalFixtureSuite extends FunSuite { n = 1 } override def afterAll(): Unit = { - assertEquals(n, 17) + assertEquals(n, 16) n = -11 } } @@ -34,7 +34,7 @@ class SuiteLocalFixtureSuite extends FunSuite { } override def afterAll(): Unit = { - assertEquals(counter(), 17) + assertEquals(counter(), -10) } 1.to(5).foreach { i =>