我正在编写使用TemporaryFolder规则的JUnit4测试。看来它与@Rule和@ClassRule都可以正常工作。 Junit @Rule和@ClassRule有什么区别?我为什么要使用一个而不是另一个?
最佳答案
当您在一个类中有多个测试方法时,区别将变得很明显。@ClassRule
的before()
方法在任何测试方法之前运行。然后运行所有测试方法,最后运行规则的after()
方法。因此,如果您在一个类中有五个测试方法,before()
和after()
仍将仅运行一次。@ClassRule
适用于静态方法,因此具有固有的所有限制。@Rule
使测试通过规则的apply()
方法运行,该方法可以在运行目标方法之前和之后执行操作。如果您有五个测试方法,则该规则的apply()
被调用五次,作为每种方法的包装。
如果可以通过静态方法实现,则使用@ClassRule
设置可以被所有测试方法重用的对象。
使用@Rule
为每个测试方法设置需要重新创建或重置的内容。