gpt4 book ai didi

java - 如何将 CategoryFilter 传递给 JUnitcore?

转载 作者:行者123 更新时间:2023-11-30 08:01:21 24 4
gpt4 key购买 nike

如何动态构建类别过滤器并调用 JUnit 核心来运行我的测试?我正在尝试构建一个带有 main 方法的简单类,可以调用该方法来运行我的测试,但我确定这是否是一种干净的方法。

我们的想法是允许将包含项和排除项作为命令行参数传递,并使用它来构建 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);

关于java - 如何将 CategoryFilter 传递给 JUnitcore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com