在JUnit 4.10及更低版本中,可以将规则注释为@Rule和@ClassRule。这意味着该规则在类之前/之后,每次测试之前/之后被调用。这样做的一个可能原因是设置昂贵的外部资源(通过@ClassRule调用),然后廉价地重置它(通过@Rule调用)。

从JUnit 4.11开始,@ Rule字段必须是非静态的,而@ClassRule字段必须是静态的,因此以上不再可行。

显然有解决方法(例如,将@ClassRule和@Rule职责明确地划分为单独的规则),但是必须强制使用两个规则似乎很可耻。我简要地看了一下使用@Rule并推断出它的第一个/最后一个测试,但是我不相信信息是可用的(至少,在Description上不是直接可用的)。

是否在JUnit 4.11的单个规则中将@ClassRule和@Rule功能组合在一起的整洁方法?

谢谢,
罗文

最佳答案

从JUnit 4.12(在撰写本文时尚未发布)开始,可以使用@Rule@ClassRule注释单个静态规则。

请注意,它必须是静态的-用@Rule@ClassRule注释的非静态规则仍然被认为是无效的(因为任何注释的@ClassRule都在类级别起作用,因此,仅作为静态成员才有意义)。

如果您想了解更多详细信息,请参见the release notesmy pull request

关于java - 在JUnit 4.11中组合@ClassRule和@Rule,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20767486/

10-09 04:11