我正在编写使用TemporaryFolder规则的JUnit4测试。似乎它适用于@Rule和@ClassRule。Junit@Rule和@ClassRule有什么区别?为什么我应该使用一个而不是另一个? 最佳答案 当你在一个类中有多个测试方法时,区别就变得很明显了。@ClassRule的before()方法在任何测试方法之前运行。然后运行所有的测试方法,最后是规则的after()方法。因此,如果您在一个类中有五个测试方法,before()和after()仍然只会运行一次。@ClassRule适用于静态方法,因此具有其中固有的所有限制
我正在编写使用TemporaryFolder规则的JUnit4测试。似乎它适用于@Rule和@ClassRule。Junit@Rule和@ClassRule有什么区别?为什么我应该使用一个而不是另一个? 最佳答案 当你在一个类中有多个测试方法时,区别就变得很明显了。@ClassRule的before()方法在任何测试方法之前运行。然后运行所有的测试方法,最后是规则的after()方法。因此,如果您在一个类中有五个测试方法,before()和after()仍然只会运行一次。@ClassRule适用于静态方法,因此具有其中固有的所有限制
在JUnit中,您可以使用@ClassRule来注释静态字段。我如何在Kotlin中做到这一点?我试过了:objectcompanion{@ClassRule@JvmStaticvalmanagedMongoDb=...}andobjectcompanion{@ClassRule@JvmFieldvalmanagedMongoDb=...}但最后一个都不起作用,因为没有执行规则。我仔细检查了完全相同的规则在没有静态上下文的情况下可以正常工作:@Rule@JvmFieldvalmanagedMongoDb=... 最佳答案 您没有使用
在JUnit中,您可以使用@ClassRule来注释静态字段。我如何在Kotlin中做到这一点?我试过了:objectcompanion{@ClassRule@JvmStaticvalmanagedMongoDb=...}andobjectcompanion{@ClassRule@JvmFieldvalmanagedMongoDb=...}但最后一个都不起作用,因为没有执行规则。我仔细检查了完全相同的规则在没有静态上下文的情况下可以正常工作:@Rule@JvmFieldvalmanagedMongoDb=... 最佳答案 您没有使用
在JUnit4.10及更低版本中,可以将规则注释为@Rule和@ClassRule。这意味着规则在上课之前/之后以及每次测试之前/之后被调用。这样做的一个可能原因是设置一个昂贵的外部资源(通过@ClassRule调用),然后廉价地重置它(通过@Rule调用)。从JUnit4.11开始,@Rule字段必须是非静态的,@ClassRule字段必须是静态的,因此上述情况不再可行。显然有一些解决方法(例如,明确地将@ClassRule和@Rule职责分离为单独的规则),但必须强制使用两个规则似乎很可惜。我简要地查看了使用@Rule并推断它是否是第一个/最后一个测试,但我不相信该信息可用(至少,