在JUnit中,您可以使用@ClassRule注释静态字段。 我怎么能在Kotlin做到这一点?
我试过了:
object companion {
@ClassRule @JvmStatic
val managedMongoDb = ...
}
and
object companion {
@ClassRule @JvmField
val managedMongoDb = ...
}
但最后一个都没有,因为规则没有被执行。
我仔细检查了完全相同的规则在没有静态上下文的情况下正常工作:
@Rule @JvmField
val managedMongoDb = ...
答案 0 :(得分:22)
您没有正确使用companion objects。您正在声明一个名为companion
的对象(类的单个实例),而不是在类中创建companion object
。因此,静态字段无法正确创建。
class TestClass {
companion object { ... }
}
与以下内容截然不同:
class TestClass {
object companion { ... } // this is an object declaration, not a companion object
}
虽然两者都是有效的代码。
以下是在Kotlin 1.0.0中使用@ClassRule
的正确工作示例:
class TestWithRule {
companion object {
@ClassRule @JvmField
val resource: ExternalResource = object : ExternalResource() {
override fun before() {
println("ClassRule Before")
}
override fun after() {
println("ClassRule After")
}
}
}
@Test fun testSomething() {
println("Testing...")
}
}
输出:
ClassRule之前 测试...
之后的ClassRule