Maven Java Surefire无法创建测试类

6
我遇到了问题,当我运行mvn test时。以下是输出的一部分:
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] There was an error in the forked process
[ERROR] Unable to create test class 'com.models.ExampleTest'
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
[ERROR] Unable to create test class 'com.ExampleTest'
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:657)
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:283)
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:246)
[ERROR]     at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1161)
[ERROR]     at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1002)

这是我的pom.xml的一部分:

<build>
       <plugins>    
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>
        </plugins>
</build>
<dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
</dependencies>

我添加了<useSystemClassLoader>false</useSystemClassLoader>,因为当我执行mvn test命令时出现了Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter的问题。所以我认为我的ClassLoader有些问题。我使用的是Ubuntu 18.04、openjdk-11和maven 3.6.0。但我也尝试过在oracle-jdk-11和openjdk-8上运行这个命令。此外,这个问题并不取决于项目。我创建了一个空项目,并添加了一个简单的类和简单的测试 - 结果是相同的。


我会说看起来似乎存在一个问题,就是Java进程maven试图启动以运行测试。你有查看转储文件吗? - Vincz777
是的,那里有类似的信息 - 无法创建测试类,由于ClassNotFoundException引起。 - Secret-guy
你的项目中是否在使用Jacoco? - khmarbaise
是的,我尝试过了。但是当我从pom.xml中删除它时,什么也没有改变。而且,我还尝试创建一个新的干净项目,问题仍然存在。 - Secret-guy
在macOS Mojave 10.14.4 (18E226)上,使用openjdk 11.0.2也会出现同样的问题。虽然使用的是相同的surefire版本,但junit版本为v5.3.2。 - awwsmm
1个回答

1

根据日志所述:

请参考转储文件(如果存在)[日期].dump、[日期]-jvmRun[N].dump和[日期].dumpstream

您需要查看 xxx.dump 文件。您应该在项目的 target 目录中找到它。 在该文件中,您将找到导致以下错误的原因和堆栈跟踪:

[ERROR] Unable to create test class 'com.models.ExampleTest'

此堆栈跟踪与输出中的不同,并将帮助您确定错误的真正原因(在我的情况下,是 Javassist 版本,但在您的情况下可能无关紧要)。

从我的理解来看(我对 Surefire 没有了解),Surefire 充当容器并创建一个进程来运行测试。如果在这个“内部”过程中出现问题,它将被记录在转储文件中。但这不是 Surefire 的错(正如输出可能让人想到的那样)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接