【问题标题】:How to run a JUnit test programatically and specify a classpath如何以编程方式运行 JUnit 测试并指定类路径
【发布时间】:2022-01-20 23:14:23
【问题描述】:

我正在编写一个自定义工具,它使用 JUnit 5 以编程方式执行一组测试类。

在执行这些测试时,有没有办法为执行定义类路径? (我有一组正在提供的 jar,以及一些我需要添加到类路径中的已编译生产和测试代码)。

我大致有以下代码:

LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                                                                  .selectors(selectPackage(basePackage))
                                                                  .filters(includeClassNamePatterns(classNamePatterns))
                                                                  .build();

SummaryGeneratingListener listener = new SummaryGeneratingListener();

Launcher launcher = LauncherFactory.create();
launcher.registerTestExecutionListeners(listener);

TestPlan testPlan = launcher.discover(request);

// launcher.execute(request);
launcher.execute(testPlan);

TestExecutionSummary summary = listener.getSummary();
summary.printTo(new PrintWriter(System.out));
summary.printFailuresTo(new PrintWriter(System.out));

这样做的正确方法是什么?

【问题讨论】:

  • 这取决于您如何构建自定义工具。如果该工具是一个 shell 脚本或者可以启动一个 shell 脚本,你可以编译然后运行这个带有附加类路径的测试类。
  • @ShankarPS:我希望以编程方式执行此操作,以便相应的类路径仅对在 ClassLoader 中运行的测试有效,并且不会影响可能正在运行的其他测试的执行同时使用不同的类路径。

标签: java junit5


【解决方案1】:

在构建请求时,您可以通过org.junit.platform.engine.discovery.ClasspathRootSelector 选择类路径根。

【讨论】:

  • 这是否也适用于例如target/classestarget/test-classes 下的生产/测试代码?你介意用一个更详细的例子来扩展你的答案吗?
  • 你认为你可以提供一个如何做到这一点的工作说明吗?我需要能够在运行时动态指定测试的类路径和位置。
猜你喜欢
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
相关资源
最近更新 更多