java - 运行时的 JUnit 测试方法选择

标签 java junit4

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

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

更清楚地说,

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

提前致谢, 苏尼尔

最佳答案

您可以使用自定义 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");
    }

}

关于java - 运行时的 JUnit 测试方法选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16707680/

相关文章:

java - Java 上的多个扩展

Java 8 字符串内存不足错误

java - JUnit 多次运行测试

java - DynamoDB put Item 未使用 MockiTo 和 PowerMock 进行模拟

Java 使用带有 switch 语句的枚举

java - 我正在尝试使用一系列数组并将它们的值配对

java - @After 和 @Before 注解不执行第二个方法

java - Mockito - 方法内的模拟对象

kotlin - 找不到房间测试数据库实现

java - Java 中未按要求获取用户输入