未找到其他库的 JUnit5 侦听器

问题描述 投票:0回答:1

我有几个不同的 gradle 项目(Proj_A、Proj_B、Proj_C 等),其中仅包含 JUnit5 测试。我有另一个库包

FooLibrary
,其中我定义了
ResultAnalyzer
来对测试结果执行一些操作。

import lombok.extern.slf4j.Slf4j;
import org.junit.platform.launcher.TestPlan;
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;

@Slf4j
public class ResultAnalyzer extends SummaryGeneratingListener {
    @Override
    public void testPlanExecutionFinished(TestPlan testPlan) {
        // This method is invoked after all tests in all containers is finished
        log.info("[CustomTestSummary]: Running after all tests are done.");
        super.testPlanExecutionFinished(testPlan);
        analyzeResult();
    }

    private void analyzeResult() {
        var summary = getSummary();
        var failures = summary.getFailures();
        final var testsSucceededCount = summary.getTestsSucceededCount();
        log.info("[CustomTestSummary]: Passed: {}", testsSucceededCount);
        // Do something
    }
}

我还在同一个

src/test/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener
包中添加了文件
FooLibrary

现在,我想在所有测试项目(

FooLibrary
Proj_A
Proj_B
)中使用这个
Proj_C
并处理他们的测试执行结果。但是,所以我在所有测试包中添加了依赖项并尝试运行测试,但出现以下错误:

Caused by: java.util.ServiceConfigurationError: org.junit.platform.launcher.TestExecutionListener: Provider com.apple.store.qe.utils.ResultAnalyzer not found
    at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:593)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1219)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1228)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273)
    at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
    at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
    at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
    at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    at org.junit.platform.launcher.core.LauncherFactory.registerTestExecutionListeners(LauncherFactory.java:179)
    at org.junit.platform.launcher.core.LauncherFactory.createDefaultLauncher(LauncherFactory.java:137)
    at org.junit.platform.launcher.core.LauncherFactory.openSession(LauncherFactory.java:98)
    at org.junit.platform.launcher.core.LauncherFactory.openSession(LauncherFactory.java:82)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$BackwardsCompatibleLauncherSession.open(JUnitPlatformTestClassProcessor.java:318)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.createTestExecutor(JUnitPlatformTestClassProcessor.java:81)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.startProcessing(AbstractJUnitTestClassProcessor.java:50)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.startProcessing(SuiteTestClassProcessor.java:42)
    ... 18 more

我分析了

FooLibrary
的.jar依赖内容,可以看到
ResultAnalyzer
被捆绑在jar中。如果我将
ResultAnalyzer
移至测试包,它就可以正常工作。

那么,我需要进行哪些更改才能将

ResultAnalyzer
保留在
FooLibrary
中并且不需要复制所有测试包?有人可以分享一些关于我如何实现相同目标的指示吗?

java gradle junit5
1个回答
0
投票

我还在同一个 FooLibrary 包中添加了文件 src/test/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener 。

jar artefact 中通常不提供测试模块,因此必须在

中配置测试执行监听器

src/main/resources/META-INF/services
.

为了出现在 FooLibrary 的 jar 文件中。

警告:由于未提供有关 Gradle 构建文件和源代码结构的完整信息,我的猜测可能是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.