我正在编写 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 许可协议
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.2k 阅读✓ 已解决
当您在一个类中有多个测试方法时,区别就很明显了。
A
@ClassRule
有其before()
方法在任何测试方法之前运行。然后运行所有测试方法,最后是规则的after()
方法。因此,如果您在一个类中有五个测试方法,before()
和after()
仍然只会运行一次。@ClassRule
适用于静态方法,因此具有其中固有的所有限制。@Rule
导致测试通过规则的apply()
方法运行,该方法可以在运行目标方法之前和之后执行操作。如果您有五个测试方法,则规则的apply()
被调用五次,作为每个方法的包装器。使用
@ClassRule
设置可以被所有测试方法重用的东西,如果你可以在静态方法中实现的话。使用
@Rule
为每种测试方法设置需要创建新的或重置的内容。