我正在编写使用TemporaryFolder规则的JUnit4测试。看来它与@Rule和@ClassRule都可以正常工作。 Junit @Rule和@ClassRule有什么区别?我为什么要使用一个而不是另一个?

最佳答案

当您在一个类中有多个测试方法时,区别将变得很明显。
@ClassRulebefore()方法在任何测试方法之前运行。然后运行所有测试方法,最后运行规则的after()方法。因此,如果您在一个类中有五个测试方法,before()after()仍将仅运行一次。
@ClassRule适用于静态方法,因此具有固有的所有限制。
@Rule使测试通过规则的apply()方法运行,该方法可以在运行目标方法之前和之后执行操作。如果您有五个测试方法,则该规则的apply()被调用五次,作为每种方法的包装。

如果可以通过静态方法实现,则使用@ClassRule设置可以被所有测试方法重用的对象。

使用@Rule为每个测试方法设置需要重新创建或重置的内容。

10-08 01:34