由于没有明显的原因,并且没有对代码进行任何相关更改,我的数据库万无一失的测试在特定测试后挂起。控制台输出表明测试 50 成功完成,测试 51 尚未开始
[INFO] Running xxxx.server.db.dao.Test50
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.954 s - in xxxx.server.db.dao.Test50
Run Code Online (Sandbox Code Playgroud)
我已经运行以下命令来检索下面的线程转储
mvndebug -DforkCount=0 clean install
Run Code Online (Sandbox Code Playgroud)
以下也不起作用,并在测试运行的同一点导致相同的行为
mvn clean install
Run Code Online (Sandbox Code Playgroud)
测试正在使用 maven 3.3.9 的带有 MySQL 5.7 服务器的 Windows 10 上运行。我试过使用不同版本的 Maven 没有成功。此外,我尝试了不同版本的surefire插件和不同的fork设置,唯一可行的组合如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<forkMode>always</forkMode>
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
<threadCount>1</threadCount>
<parallel>suites</parallel>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
挂起时的线程转储状态如下:
"main@1" prio=5 tid=0x1 nid=NA waiting
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Unsafe.java:-1)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.awaitResultsDone(ForkStarter.java:460)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.runSuitesForkPerTestSet(ForkStarter.java:441)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:293) …Run Code Online (Sandbox Code Playgroud)