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