Junit框架中动态选择是否执行test

这篇博客探讨了如何在Junit框架中实现更细粒度的动态控制,即在已有的Category功能基础上,利用Rule特性根据运行时参数决定是否执行特定的test。当ap_2g和ap_5g相等且test方法名包含5GHz时,Rule将阻止该test的执行。通过将此Rule应用到测试类,可以灵活地控制测试用例的执行情况。

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

一组应用了junit的测试,需要增加一个动态判断,来决定是否跑test。我知道这组测试其实已经应用了junit的Category功能,来做测试组的初期分类,在跑这一整套测试的时候,执行环节会针对不同的被测产品给出一个custom参数,测试代码跑起来后会根据这个custom的值,来选择排除某些category和包括哪些category。

现在这个策略不够用了,因为之前标记好的category,同一个分类下还是有动态选择执行的需求,于是这次用到了junit中rule特性。

见下面代码就实现了一个rule。

package com.ibm.robot.web.util;

import com.ibm.robot.web.util.WebPropertiesLoader;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

public class NotRun5gCase implements TestRule {
    @Override
    public Statement apply(final Statement base, final Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                String methodName = description.getMethodName();
                loader = new WebPropertiesLoader();
                String ap_2g = loader.getString("WIFI.ap.2G", "unknow");
                String ap_5g = loader.getString("WIFI.ap.5G", "unknow");
                if (!(ap_2G.equals(ap_5G) && methodName.contains("5GHz"))) {
                        base.evaluate();
                }
            }
        };
    }
}

从代码中可见,这条rule规定当ap_2g的值与ap_5g相等,同时test的方法名中包含5GHz的话,则不执行这个test。

把这条rule应用到具体的test中即可。

public class WiFiTest{

    @Rule
    public TestRule notRun5gCase = new NotRun5gCase ();

    @Before
    public void setUp() throws Exception {
        System.out.println("setup actions");
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("tearDown actions");
    }

    @Test
    public void testWiFi2GHz() {
        //to test wi-fi 2g
    }

    @Test
    public void testWiFi5GHz() {
        //to test wi-fi 5g
    }
}

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值