当前位置: 首页 > 知识库问答 >
问题:

ID为“junit jupiter”的TestEngine未能发现测试-原因是:org。朱尼特。站台平民JUnitException:类选择器解析失败

廉子民
2023-03-14

我在运行集成测试时遇到了问题。

作为测试的一部分,我使用exec-maven-plugin从源代码控制中下拉其他项目,然后在本地运行它们,这样我的测试就可以使用它来执行。

我对JUnit的Maven依赖项包括:

<plugins>
    <plugin>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M5</version>
        <configuration>
            <useModulePath>false</useModulePath>
            <useSystemClassLoader>false</useSystemClassLoader>
            <skipTests>false</skipTests>
            <includes>
                <include>**/*IntegrationTest.java</include>
            </includes>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>
...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.4.2</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我已经创建了一个名为集成测试的配置文件,这样我就可以选择何时启用集成测试,并添加了一个参数到maven-surefire插件,名为skipUTs,这样我就可以跳过单元测试。

运行的输出:mvn clean verify-pinintegration test-DskipUTs=true

org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:111)
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:85)
    at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:92)
    at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:67)
    at org.apache.maven.surefire.junitplatform.TestPlanScannerFilter.accept(TestPlanScannerFilter.java:56)
    at org.apache.maven.surefire.api.util.DefaultScanResult.applyFilter(DefaultScanResult.java:102)
    at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:147)
    at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:128)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:428)
    at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
    at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:562)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:548)
Caused by: org.junit.platform.commons.JUnitException: ClassSelector [className = 'com.farmlandbee.app.integration.IntegrationTest'] 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:102)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:82)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:45)
    at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)
    at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:103)
    ... 11 more
Caused by: java.lang.ArrayStoreException
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
    at java.lang.Class.getAnnotationCache(Class.java:2535)
    at java.lang.Class.getDeclaredAnnotation(Class.java:2221)
    at org.junit.platform.commons.util.AnnotationUtils.findAnnotation(AnnotationUtils.java:128)
    at org.junit.platform.commons.util.AnnotationUtils.findAnnotation(AnnotationUtils.java:115)
    at org.junit.jupiter.engine.descriptor.DisplayNameUtils.determineDisplayName(DisplayNameUtils.java:68)
    at org.junit.jupiter.engine.descriptor.JupiterTestDescriptor.<init>(JupiterTestDescriptor.java:69)
    at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.<init>(ClassBasedTestDescriptor.java:94)
    at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.<init>(ClassTestDescriptor.java:51)
    at org.junit.jupiter.engine.discovery.ClassSelectorResolver.newClassTestDescriptor(ClassSelectorResolver.java:119)
    at org.junit.jupiter.engine.discovery.ClassSelectorResolver.lambda$resolve$0(ClassSelectorResolver.java:71)
    at org.junit.jupiter.engine.discovery.ClassSelectorResolver$$Lambda$61/0000000000000000.apply(Unknown Source)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext.createAndAdd(EngineDiscoveryRequestResolution.java:246)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$DefaultContext.addToParent(EngineDiscoveryRequestResolution.java:209)
    at org.junit.jupiter.engine.discovery.ClassSelectorResolver.resolve(ClassSelectorResolver.java:71)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:134)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution$$Lambda$47/0000000000000000.apply(Unknown Source)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:514)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:501)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:487)
    at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:241)
    at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:185)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:125)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:91)
    ... 16 more

测试类别大致如下:

@SpringBootTest(classes = Application.class,
        webEnvironment = WebEnvironment.RANDOM_PORT)
@Import({SSLRestTemplateConfig.class})
@ExtendWith(SpringExtension.class)
@ActiveProfiles(profiles = {"integration"})
public class IntegrationTest {

    @LocalServerPort
    private int port;

    private final RestTemplate restTemplate;

    @Spy
    private final Service Service;

    private final IQueue<String> queue;

    @Captor
    ArgumentCaptor<String> captor;

    @Autowired
    public IntegrationTest(RestTemplate restTemplate,
                                Service service,
                                HazelcastInstance hazelcastInstance) {
        this.restTemplate = restTemplate;
        this.service = accountingQueueService;
        this.queue = hazelcastInstance.getQueue("queue");
    }

    @BeforeEach
    public void setup() {
        queue.clear();
    }

    @Test
    public void IntegrationTest() throws InterruptedException {
        ...
    }

}

任何帮助都将不胜感激。

共有2个答案

壤驷兴朝
2023-03-14

尝试通过如下命令传递配置文件:

mvn clean verify -Dspring.profiles.active=integration-test
顾正初
2023-03-14

我相信问题会出在以下其中一个方面。我不认为有足够的信息来确定它,但我想给你所有的途径来探索,这是太多了,放在一个大评论。

我已经按照复杂性的顺序列出了它们。

  1. 您还没有完全设置您的自定义集成测试

这里有一些相关信息可以帮助您配置配置文件并加以利用:用于集成测试的Spring Boot默认配置文件

如果是这样,那么只需将注释更新为集成测试即可。

我不熟悉显示名称生成器是如何选择的,但有一行对我来说是最值得回顾的。堆栈跟踪中的行是:org。朱尼特。木星发动机描述符。DisplayNameUtils。determineDisplayName(DisplayNameUtils.java:68)

我相信这是支持这句话的正确代码:http://www.howsoftworks.net/junjupen/DisplayNameUtils#determineDisplayName-AnnotatedElement-Supplier

它似乎在评估整个类的注释,以尝试收回此注释。但是,上面没有配置DisplayName注释,所以我认为DisplayName没有问题,但是其他的一个有问题。

进一步查看堆栈,它似乎正在尝试利用/缓存类本身的注释。这可能导致annotations缓存此时评估类上的所有条目,displayName只是第一个被请求的条目。

在这种情况下,它可能会在您的某个您根本没有正确配置的其他注释上绊倒。ArrayStore异常让我想知道你是否把一个元素放在了数组应该在的地方,反之亦然。

但是,进一步研究后,这个错误(注释解析器中的第724行)似乎与一套JDK问题有关,这些问题在一个JDK-11版本中得到了正确的修复。它在其他地方表示为sun.reflect.annotation.TypeNotPresentExceptionProxy。

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-7183985

这些bug的要点与引用不在类路径中的类(类型不存在)的注释有关。这可能是您配置中的一个注释发生的情况,但从发布的信息来看,我们不太可能建议使用哪一个注释。

升级到JDK修复了这个问题,这可能会帮助您更好地确定根本问题,方法是报告一个更好的错误,并提供特定的缺失类型信息。如果这是一个选择,你也可以选择这样做。

根本问题可能是您的新概要文件环境导致错误配置,意外地排除了一个类,您需要该类才能使测试上的注释保持一致。

 类似资料:
  • 我正在使用Mochito,无法返回使用MarshallSendReceive进行的api调用的模拟响应。 以下是服务api调用(其中serviceRequest的类型为ValidateRequest,HeaderComposingCallback实现WebServiceMessageCallback) 这里是JUnit测试中的模拟,validateResponse是创建的对象,填充了值,但在运行下

  • 我正在处理一个小组项目,并试图运行一个测试。当运行它时,我得到了文件中的错误以及org.junit.platform.commons.util.预处理违规异常:无法加载带有名称的类... 我尝试了使缓存失效并重新启动,还尝试了重新导入pom。xml文件,但在尝试运行测试时仍会出现错误。 任何帮助都将不胜感激。 我正在使用intellij IDEA 2019.2.4(社区版) Intellij显示的

  • 每当我运行我的项目JUnit测试(使用JUnit5和Java9以及Eclipse Oxygen1.a),我都会遇到Eclipse找不到任何测试的问题。 在运行配置下,eclipse甚至找不到用@test注释的方法,而是只向我显示“(所有方法)”。下面的图片希望能更好地展示我的设置: 我已经试过了 null 这些步骤中的一些可以在这里找到,但最终问题仍然存在。

  • 我正在尝试将jboss 4升级到jboss 7并使用Wildfly 10进行研究。 现在我说的是错误的 引起:java.lang.ClassNotFoundException:org.infinispan.commons.CacheException从[模块"deployment.mes-webservices.ear: main"从服务模块加载器] org.jboss.modules.Modul

  • 另一个信息: Python 2.7.5 /usr/lib/python2.7/site-packages(Python2.7)中的PIP 9.0.1 OS:Centos7 Linux localhost.localdomain 3.10.0-514.6.1.el7.x86_64#1 SMP Wed 1月18日13:06:36 UTC 2017 x86_64 x86_64 x86_64 gnu/Li

  • 我有以下问题: 基于jenkins的构建不起作用,因为ui测试无法运行(此时需要部署应用程序) jenkins如何在此时部署程序,以便应用程序能够运行selenium测试?