Junit @Rule与@ClassRule注解

@Before/@After Vs @Rule

若是咱们想再多个测试类中服用编写的@Before装饰的setUp()方法和@After装饰的tearDown()方法时,能够考虑使用@Rule注解。
在使用@Rule注解时,@Rule修饰的类须要实现TestRuleMethodRule(计划被@TestRule所取代)接口中的apply方法。app

@Rule Vs @ClassRule

@ClassRule对标@BeforeClass/@AfterClass
@Rule对标@Before/@After
@ClassRule 是 static方法,@Rule不是。但@ClassRule@Rule修饰的成员变量都必须为publicide

TestRule 示例:

public class TestMethodNameLogger implements TestRule {
 
    private static final Logger LOG = LoggerFactory.getLogger(TestMethodNameLogger.class);
 
    @Override
    public Statement apply(Statement base, Description description) {
        logInfo("Before test", description);
        try {
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {
                    base.evaluate();
                }
            };
        } finally {
            logInfo("After test", description);
        }
    }
 
    private void logInfo(String msg, Description description) {
        LOG.info(msg + description.getMethodName());
    }
}

当咱们在实现apply方法时,咱们必须返回一个Statement的实例。这个实例表明着咱们在Junit运行时中的测试。在调用evaluate()方法时测试被执行。 测试

Junit的Rule可能会以任意顺序执行。若是想要控制多个Rule的执行顺序,可使用@RuleChainlua

参考资料:

相关文章
相关标签/搜索