在Kotlin中使用@ClassRule

在JUnit中,您可以使用@ClassRule来注释一个静态字段。 我怎么能在Kotlin做到这一点?

我试过了:

object companion { @ClassRule @JvmStatic val managedMongoDb = ... } and object companion { @ClassRule @JvmField val managedMongoDb = ... } 

但没有最后的作品,因为规则没有执行。

我再次检查完全相同的规则工作正常,没有静态上下文:

 @Rule @JvmField val managedMongoDb = ... 

您没有正确使用伴侣对象 。 您正在声明一个名为companion的对象(一个类的单个实例),而不是在类中创建companion object 。 因此,静态字段不能正确创建。

 class TestClass { companion object { ... } } 

与以下非常不同:

 class TestClass { object companion { ... } // this is an object declaration, not a companion object } 

虽然两者都是有效的代码。

这里是使用@ClassRule一个正确的工作示例,在Kotlin 1.0.0中进行了测试:

 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之后