Junit @Rule 和@ClassRule

新手上路,请多包涵

我正在编写 JUnit4 测试,其中我使用 TemporaryFolder 规则。它似乎适用于@Rule 和@ClassRule。 Junit @Rule 和@ClassRule 有什么区别?为什么我应该使用一个而不是另一个?

原文由 Viktar Kava 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

当您在一个类中有多个测试方法时,区别就很明显了。

A @ClassRule 有其 before() 方法在任何测试方法之前运行。然后运行所有测试方法,最后是规则的 after() 方法。因此,如果您在一个类中有五个测试方法, before()after() 仍然只会运行一次。

@ClassRule 适用于静态方法,因此具有其中固有的所有限制。

@Rule 导致测试通过规则的 apply() 方法运行,该方法可以在运行目标方法之前和之后执行操作。如果您有五个测试方法,则规则的 apply() 被调用五次,作为每个方法的包装器。

使用 @ClassRule 设置可以被所有测试方法重用的东西,如果你可以在静态方法中实现的话。

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

原文由 slim 发布,翻译遵循 CC BY-SA 4.0 许可协议

@Rule 不能设置为在@BeforeClass 之前运行。

而 @ClassRule 必须在静态方法上。

原文由 Slavus 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题