我正在编写 JUnit4 测试,其中我使用 TemporaryFolder 规则。它似乎适用于@Rule 和@ClassRule。 Junit @Rule 和@ClassRule 有什么区别?为什么我应该使用一个而不是另一个?
原文由 Viktar Kava 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在编写 JUnit4 测试,其中我使用 TemporaryFolder 规则。它似乎适用于@Rule 和@ClassRule。 Junit @Rule 和@ClassRule 有什么区别?为什么我应该使用一个而不是另一个?
原文由 Viktar Kava 发布,翻译遵循 CC BY-SA 4.0 许可协议
8 回答6.5k 阅读
2 回答3.4k 阅读
4 回答621 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答948 阅读✓ 已解决
2 回答2k 阅读
当您在一个类中有多个测试方法时,区别就很明显了。
A
@ClassRule
有其before()
方法在任何测试方法之前运行。然后运行所有测试方法,最后是规则的after()
方法。因此,如果您在一个类中有五个测试方法,before()
和after()
仍然只会运行一次。@ClassRule
适用于静态方法,因此具有其中固有的所有限制。@Rule
导致测试通过规则的apply()
方法运行,该方法可以在运行目标方法之前和之后执行操作。如果您有五个测试方法,则规则的apply()
被调用五次,作为每个方法的包装器。使用
@ClassRule
设置可以被所有测试方法重用的东西,如果你可以在静态方法中实现的话。使用
@Rule
为每种测试方法设置需要创建新的或重置的内容。