一尘不染

如何在JUnit 4中动态创建测试套件?

java

我想使用JUnit 4创建一个junit测试套件,在运行测试套件之前,要包含的测试类的名称是未知的。

在JUnit 3中,我可以这样做:

public final class MasterTester extends TestCase
{
  /**
   * Used by junit to specify what TestCases to run.
   * 
   * @return a suite containing what TestCases to run
   */
  public static TestSuite suite() {
    TestSuite suite = new TestSuite();

    for(Class<?> klass : gatherTestClasses()) {
      suite.addTestSuite(klass);
    }

    return suite;
  }
}

并让该gatherTestClasses()方法确定要运行的测试类。

在JUnit
4中,文档说要使用批注:@SuiteClasses({TestClass1.class, TestClass2.class...})构建我的测试套件。有许多SO答案显示了如何执行此操作。不幸的是,我看到的示例似乎不允许传递动态生成的TestClasses列表。

这样的建议我必须继承BlockJUnit4ClassRunner我不想做的子类。

动态指定的测试套件似乎必须放在​​JUnit 4中。有人知道吗?


阅读 216

收藏
2020-09-08

共1个答案

一尘不染

当我在测试类上使用命名约定时,我发现Classpath套件非常有用。

https://github.com/takari/takari-cpsuite

这是一个例子:

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.runner.RunWith;

@RunWith(ClasspathSuite.class)
@ClassnameFilters({".*UnitTest"})
public class MySuite {
}
2020-09-08