Java版本JUnit5 @BeforeAll和@AfterAll的用法可以参考此文。
Kotlin的类是没有静态方法的,如果要提供类似于Java的静态方法,可以使用伴生对象(companion object)语法。
应用于所有实例的@BeforeAll和@AfterAll
把Java版静态方法的JUnit 5 @BeforeAll和@AfterAll使用Kotlin的伴生对象语法转换如下:
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.slf4j.LoggerFactory
class Junit5KotlinTest {
@Test
fun aTest1() {
LOGGER.info("aTest1 called")
LOGGER.info(this.toString())
}
@Test
fun aTest2() {
LOGGER.info("aTest2 called")
LOGGER.info(this.toString())
}
companion object {
private val LOGGER = LoggerFactory.getLogger(Junit5KotlinTest::class.java)
@BeforeAll
@JvmStatic
internal fun beforeAll() {
LOGGER.info("beforeAll called")
}
@AfterAll
@JvmStatic
internal fun afterAll() {
LOGGER.info("afterAll called")
}
}
}
这里使用了@JvmStatic注释用来标记@BeforeAll和@AfterAll注释的方法是等同于JVM的静态方法。@BeforeAll注释的方法会在所有实例的所有测试用例之前调用。@AfterAll注释的方法会在所有实例的所有测试用例之后调用。
应用于实例的@BeforeAll和@AfterAll
应用在实例方法上那就简单点了,Java版的转换如下:
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.slf4j.LoggerFactory
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class Junit5KotlinTest {
private val LOGGER = LoggerFactory.getLogger(Junit5KotlinTest::class.java)
@BeforeAll
internal fun beforeAll() {
LOGGER.info("beforeAll called")
}
@Test
fun aTest1() {
LOGGER.info("aTest1 called")
LOGGER.info(this.toString())
}
@Test
fun aTest2() {
LOGGER.info("aTest2 called")
LOGGER.info(this.toString())
}
@AfterAll
internal fun afterAll() {
LOGGER.info("afterAll called")
}
}