在 JUnit 4.10 及更低版本中,可以将规则注释为@Rule 和@ClassRule。这意味着规则在上课之前/之后以及每次测试之前/之后被调用。这样做的一个可能原因是设置一个昂贵的外部资源(通过@ClassRule 调用),然后廉价地重置它(通过@Rule 调用)。
从 JUnit 4.11 开始,@Rule 字段必须是非静态的,@ClassRule 字段必须是静态的,因此上述情况不再可行。
显然有一些解决方法(例如,明确地将 @ClassRule 和 @Rule 职责分离为单独的规则),但必须强制使用两个规则似乎很可惜。我简要地查看了使用@Rule 并推断它是否是第一个/最后一个测试,但我不相信该信息可用(至少,它不直接在描述中可用)。
在 JUnit 4.11 中是否有一种简洁的方式将 @ClassRule 和 @Rule 功能组合到单个规则中?
谢谢, 罗文</p>
最佳答案
从 JUnit 4.12(撰写本文时未发布)开始,可以使用 @Rule
和 @ClassRule
注释单个静态规则。
请注意,它必须是静态的 - 使用 @Rule
和 @ClassRule
注释的非静态规则仍然被认为是无效的(就像任何注释的 @ClassRule
在类级别工作,因此只有作为静态成员才真正有意义)。
见 the release notes和 my pull request如果您有兴趣了解更多细节。
关于java - 在 JUnit 4.11 中结合 @ClassRule 和 @Rule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20767486/