我想使用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()方法确定要运行的测试类。
gatherTestClasses()
在JUnit 4中,文档说要使用批注:@SuiteClasses({TestClass1.class, TestClass2.class...})构建我的测试套件。有许多SO答案显示了如何执行此操作。不幸的是,我看到的示例似乎不允许传递动态生成的TestClasses列表。
@SuiteClasses({TestClass1.class, TestClass2.class...})
这样的建议我必须继承BlockJUnit4ClassRunner我不想做的子类。
BlockJUnit4ClassRunner
动态指定的测试套件似乎必须放在JUnit 4中。有人知道吗?
当我在测试类上使用命名约定时,我发现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 { }