【问题标题】:ClassCircularityError: java/lang/WeakPairMap$Pair$Weak in JUnit5, Springboot, Pact Project in Debug ModeClassCircularityError: java/lang/WeakPairMap$Pair$Weak in JUnit5, Springboot, Pact Project in Debug Mode
【发布时间】:2023-01-23 21:13:09
【问题描述】:

我们有一个使用 JUnit 5 和 Pact 的 spring boot 项目。我们使用的是 OpenJDK 17。当我们运行 JUnit 5 测试时,我们没有遇到任何问题,但是当我们想要调试它们时,我们遇到了以下问题。

笔记: 我尝试了很多版本的 JUnit Jupiter 和 Pact 依赖项,但无法解决问题。

当我们删除 pact junit5 消费者和提供者依赖项时,调试工作正常。

我还在 IntelliJ 中尝试了 Async Stack Traces -> Instrumenting Agent 选项开/关,但它没有解决任何问题。

任何帮助深表感谢。

错误信息:

Connected to the target VM, address: '127.0.0.1:52218', transport: 'socket'
Internal Error occurred.
org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:160)
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverSafely(EngineDiscoveryOrchestrator.java:132)
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:107)
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:78)
    at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:110)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
    at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
    at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
    at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Caused by: org.junit.platform.commons.JUnitException: MethodSelector [className = 'com.emirates.ocsl.skeleton.ct.tests.SkeletonCT', methodName = 'iGetResponseSuccessfully', methodParameterTypes = ''] resolution failed
    at org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:103)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:83)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:46)
    at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:152)
    ... 13 more
Caused by: java.lang.ClassCircularityError: java/lang/WeakPairMap$Pair$Weak
    at java.base/java.lang.WeakPairMap$Pair.weak(WeakPairMap.java:201)
    at java.base/java.lang.WeakPairMap.putIfAbsent(WeakPairMap.java:123)
    at java.base/java.lang.Module.implAddReads(Module.java:488)
    at java.base/java.lang.Module.implAddReads(Module.java:449)
    at java.base/java.lang.System$2.addReads(System.java:2335)
    at java.base/jdk.internal.module.Modules.addReads(Modules.java:90)
    at java.base/java.lang.reflect.Proxy$ProxyBuilder.lambda$getDynamicModule$1(Proxy.java:918)
    at java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329)
    at java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205)
    at java.base/java.lang.reflect.Proxy$ProxyBuilder.getDynamicModule(Proxy.java:908)
    at java.base/java.lang.reflect.Proxy$ProxyBuilder.mapToModule(Proxy.java:846)
    at java.base/java.lang.reflect.Proxy$ProxyBuilder.<init>(Proxy.java:651)
    at java.base/java.lang.reflect.Proxy$ProxyBuilder.<init>(Proxy.java:656)
    at java.base/java.lang.reflect.Proxy.lambda$getProxyConstructor$0(Proxy.java:429)
    at java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329)
    at java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205)
    at java.base/java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:427)
    at java.base/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1037)
    at java.base/sun.reflect.annotation.AnnotationParser$1.run(AnnotationParser.java:302)
    at java.base/sun.reflect.annotation.AnnotationParser$1.run(AnnotationParser.java:300)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at java.base/sun.reflect.annotation.AnnotationParser.annotationForMap(AnnotationParser.java:300)
    at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:289)
    at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:121)
    at java.base/sun.reflect.annotation.AnnotationParser.parseSelectAnnotations(AnnotationParser.java:102)
    at java.base/sun.reflect.annotation.AnnotationType.<init>(AnnotationType.java:146)
    at java.base/sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:85)
    at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:262)
    at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:121)
    at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:73)
    at java.base/java.lang.Class.createAnnotationData(Class.java:4068)
    at java.base/java.lang.Class.annotationData(Class.java:4057)
    at java.base/java.lang.Class.getAnnotation(Class.java:3940)
    at java.base/java.lang.reflect.AnnotatedElement.isAnnotationPresent(AnnotatedElement.java:292)
    at java.base/java.lang.Class.isAnnotationPresent(Class.java:3950)
    at org.junit.platform.commons.util.AnnotationUtils.findAnnotation(AnnotationUtils.java:136)
    at org.junit.platform.commons.util.AnnotationUtils.isAnnotated(AnnotationUtils.java:105)
    at org.junit.jupiter.engine.discovery.predicates.IsTestableMethod.test(IsTestableMethod.java:52)
    at org.junit.jupiter.engine.discovery.predicates.IsTestMethod.test(IsTestMethod.java:23)
    at org.junit.jupiter.engine.discovery.predicates.IsTestableMethod.test(IsTestableMethod.java:26)
    at java.base/java.util.function.Predicate.lambda$or$2(Predicate.java:101)
    at java.base/java.util.function.Predicate.lambda$or$2(Predicate.java:101)
    at org.junit.platform.commons.util.ReflectionUtils.findMethod(ReflectionUtils.java:1345)
    at org.junit.platform.commons.util.ReflectionUtils.isMethodPresent(ReflectionUtils.java:1244)
    at org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.hasTestOrTestFactoryOrTestTemplateMethods(IsTestClassWithTests.java:50)
    at org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.test(IsTestClassWithTests.java:46)
    at org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.test(IsTestClassWithTests.java:27)
    at java.base/java.util.function.Predicate.lambda$or$2(Predicate.java:101)
    at org.junit.jupiter.engine.discovery.MethodSelectorResolver.resolve(MethodSelectorResolver.java:87)
    at org.junit.jupiter.engine.discovery.MethodSelectorResolver.resolve(MethodSelectorResolver.java:75)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:150)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1602)
    at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
    at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:189)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:126)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:92)
    ... 18 more

【问题讨论】:

    标签: junit5 pact


    【解决方案1】:

    我在调试测试时遇到了这个问题。当我运行它们时,我没有任何问题。经过长时间的调试会话后,我发现 pact 核心模型和 ktor 库导致了这个问题,下面的依赖设置工作正常,但我需要这些库来运行合同测试。

            <dependency>
            <groupId>au.com.dius.pact.provider</groupId>
            <artifactId>junit5</artifactId>
            <version>${pact.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>io.ktor</groupId>
                    <artifactId>ktor-network-tls-certificates</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.ktor</groupId>
                    <artifactId>ktor-server-netty</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>au.com.dius.pact.core</groupId>
                    <artifactId>model</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
    
        <dependency>
            <groupId>au.com.dius.pact.consumer</groupId>
            <artifactId>junit5</artifactId>
            <version>${pact.version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>io.ktor</groupId>
                    <artifactId>ktor-network-tls-certificates</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.ktor</groupId>
                    <artifactId>ktor-server-netty</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>au.com.dius.pact.core</groupId>
                    <artifactId>model</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    有谁知道如何解决这个问题?谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 2022-12-28
      • 1970-01-01
      • 2022-12-27
      • 2022-12-27
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多