1

我有一个 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 类。但我不确定如何准确使用它。任何人都可以帮助解决这个问题......?

在此先感谢, 苏尼尔

4

1 回答 1

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");
    }

}
于 2013-05-23T07:44:10.397 回答