Row*_*wan 20 java junit junit4 junit-rule
在JUnit 4.10及更低版本中,可以将规则注释为@Rule和@ClassRule.这意味着规则在类之前/之后以及每次测试之前/之后被调用.这样做的一个可能原因是设置昂贵的外部资源(通过@ClassRule调用),然后便宜地重置它(通过@Rule调用).
从JUnit 4.11开始,@ Rule字段必须是非静态的,而@ClassRule字段必须是静态的,因此上述内容不再可能.
有明确的解决方法(例如,明确地将@ClassRule和@Rule职责分离为单独的规则),但是必须强制使用两个规则似乎是一种耻辱.我简要介绍了使用@Rule并推断它是否是第一个/最后一个测试,但我不相信这些信息是可用的(至少,它不能直接在描述中获得).
在JUnit 4.11的单个规则中是否有一种干净整洁的@ClassRule和@Rule功能组合方式?
谢谢,罗恩
另一种可能的解决方法是声明静态@ClassRule并在声明非静态@Rule时使用该值:
@ClassRule
public static BeforeBetweenAndAfterTestsRule staticRule = new BeforeBetweenAndAfterTestsRule();
@Rule
public BeforeBetweenAndAfterTestsRule rule = staticRule;
Run Code Online (Sandbox Code Playgroud)
这意味着您不必重构任何现有规则类,但仍需要声明两个规则,因此它不能特别好地回答原始问题.