在运行时选择JUnit测试方法

时间:2013-05-23 07:08:08

标签: java junit4

我有一个TestCase类,有5种测试方法。我可以直接执行这个类,然后执行所有的测试方法。这很好。

假设我想执行一些测试方法(但不是全部)并且这些方法将在运行时根据某些条件决定,那么解决方案是什么??

更清楚,

我有一个TestCase类“MyTestCase”

public class MyTestCase extends TestCase
{
    @Test
    public void test1()
    {
        ....
    }    
    @Test
    public void test2()
    {
        ....
    }    
    @Test
    public void test3()
    {
        ....
    }    
    @Test
    public void test4()
    {
        ....
    }      
    @Test
    public void test5()
    {
        ....
    }
}

如果我运行此类,将执行所有测试。

但我的要求是:我不希望所有方法始终执行。有时2种方法或3种方法或4种方法等....

我有一个XML文件,它决定了必须执行哪些测试方法。 无论XML文件中有什么,只应执行那些测试方法。 (我有一个类,它读取XML文件以获取测试方法名称。)

有没有办法控制在运行时没有在TestCase类中执行的测试方法....?

我想我必须使用TestSuite类。但我不确定如何正确使用它。 任何人都可以帮助解决这个问题......?

提前致谢, 苏尼

1 个答案:

答案 0 :(得分:0)

您可以使用自定义TestRunner来执行此操作。

public class SelectiveJunitRunner extends BlockJUnit4ClassRunner {

    public SelectiveJunitRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }

    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        //Inject ignore List
        List<String> ignoreList = Arrays.asList("test2","test4");
        List<FrameworkMethod> computeTestMethods = super.computeTestMethods();
        List<FrameworkMethod> filteredList = new ArrayList<>();
        for (FrameworkMethod frameworkMethod : computeTestMethods) {
            if (!ignoreList.contains(frameworkMethod.getName()))
                filteredList.add(frameworkMethod);
        }
        return filteredList;
    }



}

Junit测试用例

@RunWith(SelectiveJunitRunner.class)
public class SelectiveTest {

    @Test
    public void test1() {
        System.out.println("1");
    }
    @Test
    public void test2() {
        System.out.println("2");
    }
    @Test
    public void test3() {
        System.out.println("3");
    }
    @Test
    public void test4() {
        System.out.println("4");
    }

}