Junit @Rule与@ClassRule注解

本文对比了@Before/@After与@Rule在JUnit单元测试中的区别,详细阐述了@Rule和@ClassRule的用法,并通过TestRule示例解释了如何在测试过程中实现特定行为。同时,提到了如何控制多个Rule的执行顺序以及相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Before/@After Vs @Rule

如果我们想再多个测试类中服用编写的@Before装饰的setUp()方法和@After装饰的tearDown()方法时,可以考虑使用@Rule注解。
在使用@Rule注解时,@Rule修饰的类需要实现TestRuleMethodRule(计划被@TestRule所取代)接口中的apply方法。

@Rule Vs @ClassRule

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

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的执行顺序,可以使用@RuleChain

参考资料:

  • https://stackoverflow.com/questions/43193188/junit-before-vs-rule
  • https://www.baeldung.com/junit-4-rules
  • https://medium.com/@elye.project/all-about-testrule-a-steroid-before-after-a74ef421e3e5
  • http://sandordargo.com/blog/2017/08/08/rules-in-junit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值