JUnit 5 AfterAll 未在 Kotlin 上执行

Mar*_*tör 3 junit kotlin junit5

如果我运行SubClass下面的单元,我希望@AfterAll在测试后执行。然而,输出只是这样:

init in super class
init in sub class
test OK
Run Code Online (Sandbox Code Playgroud)

我不明白为什么SuperClass#stop()没有被调用。我知道这@AfterAll需要一个静态方法,或者Lifecycle.PER_CLASS这是给定的。

超级班

import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.TestInstance

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
open class SuperClass {

    init {
        println("init in super class")
    }

    @AfterAll
    fun stop(){
        println("service stopped")
    }
}
Run Code Online (Sandbox Code Playgroud)

子类

import org.junit.Test

open class SubClass : SuperClass() {

    init {
        println("init in sub class")
    }

    @Test
    fun shouldRun() {
        println("test OK")
    }
}
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 7

在您的 JUnit5 测试中使用org.junit.jupiter.api.Test而不是org.junit.Test(另请查看JUnit 5 用户指南 - 注释)。

以下将按预期工作:

import org.junit.jupiter.api.Test

open class SubClass : SuperClass() {
  init {
    println("init in sub class")
  }

  @Test
  fun shouldRun() {
    println("test OK")
  }
}
Run Code Online (Sandbox Code Playgroud)