如何将 CategoryFilter 传递给 JUnitcore?
How can I pass a CategoryFilter to the JUnitcore?
如何动态构建类别过滤器并调用 JUnit 核心来 运行 我的测试?我正在尝试构建一个简单的 class,其中包含一个可以调用到 运行 我的测试的主要方法,但我确定这是否是一种干净的方法。
这个想法是允许将包含和排除作为命令行参数传递,并使用它来构建 CategoryFilter
。我在这上面花了很多时间,但还没有弄清楚如何将过滤器传递给 JunitCore。
public class SingleJUnitTestRunner {
public static void main(String... args) throws ClassNotFoundException {
System.out.println("Running tests");
System.out.println(Arrays.asList(args));
synchronized (Play.class) {
if (!Play.started) {
Play.init(new File("."), "test");
Play.start();
}
}
CategoryFilter catfil = Categories.CategoryFilter.include(Play.classloader.loadClass("testutils.SlowTests"));
List<Filter> filters = new ArrayList<Filter>();
filters.add(catfil);
TestSuite suite = new TestSuite();
for (Class tests : Play.classloader.getAnnotatedClasses(Category.class)) {
if (catfil.shouldRun(Description.createSuiteDescription(tests))) {
suite.addTest(new JUnit4TestAdapter(tests));
System.out.println("With " + tests.getName());
}
}
Result result = new JUnitCore().run(suite);
System.out.println(result.getRunCount());
System.exit(result.wasSuccessful() ? 0 : 1);
}
}
从 JUnit 4.12 开始,您可以这样做:
java org.junit.runner.JUnitCore \
--filter=org.junit.experimental.categories.IncludeCategories=testutils.SlowTests \
com.example.ExampleTestSuite
详情见release notes。
如果您想以编程方式执行此操作,请使用 Request.filterWith()
:
Request request = ...
Categories.CategoryFilter filter =
Categories.CategoryFilter.include(
testutils.SlowTests.class);
request = request.filterWith(filter);
Result result = JUnitCore.run(request);
如何动态构建类别过滤器并调用 JUnit 核心来 运行 我的测试?我正在尝试构建一个简单的 class,其中包含一个可以调用到 运行 我的测试的主要方法,但我确定这是否是一种干净的方法。
这个想法是允许将包含和排除作为命令行参数传递,并使用它来构建 CategoryFilter
。我在这上面花了很多时间,但还没有弄清楚如何将过滤器传递给 JunitCore。
public class SingleJUnitTestRunner {
public static void main(String... args) throws ClassNotFoundException {
System.out.println("Running tests");
System.out.println(Arrays.asList(args));
synchronized (Play.class) {
if (!Play.started) {
Play.init(new File("."), "test");
Play.start();
}
}
CategoryFilter catfil = Categories.CategoryFilter.include(Play.classloader.loadClass("testutils.SlowTests"));
List<Filter> filters = new ArrayList<Filter>();
filters.add(catfil);
TestSuite suite = new TestSuite();
for (Class tests : Play.classloader.getAnnotatedClasses(Category.class)) {
if (catfil.shouldRun(Description.createSuiteDescription(tests))) {
suite.addTest(new JUnit4TestAdapter(tests));
System.out.println("With " + tests.getName());
}
}
Result result = new JUnitCore().run(suite);
System.out.println(result.getRunCount());
System.exit(result.wasSuccessful() ? 0 : 1);
}
}
从 JUnit 4.12 开始,您可以这样做:
java org.junit.runner.JUnitCore \
--filter=org.junit.experimental.categories.IncludeCategories=testutils.SlowTests \
com.example.ExampleTestSuite
详情见release notes。
如果您想以编程方式执行此操作,请使用 Request.filterWith()
:
Request request = ...
Categories.CategoryFilter filter =
Categories.CategoryFilter.include(
testutils.SlowTests.class);
request = request.filterWith(filter);
Result result = JUnitCore.run(request);