Java maven surefire:我们什么时候被迫设置reuseForks=false?
在我的项目中,当我设置reuseForks=true时,我必须将forkCount增加到测试类的数量。否则,它将抛出illegalargument异常。 另外,如果我设置了reuseForks=false,那么它也可以正常工作 目前我有以下配置,因为测试类的数量少于10Java maven surefire:我们什么时候被迫设置reuseForks=false?,java,maven,testng,junit4,maven-surefire-plugin,Java,Maven,Testng,Junit4,Maven Surefire Plugin,在我的项目中,当我设置reuseForks=true时,我必须将forkCount增加到测试类的数量。否则,它将抛出illegalargument异常。 另外,如果我设置了reuseForks=false,那么它也可以正常工作 目前我有以下配置,因为测试类的数量少于10 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifac
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<reuseForks>true</reuseForks>
<forkCount>10</forkCount>
</configuration>
</plugin>
org.apache.maven.plugins
maven surefire插件
2.18.1
真的
10
如何保持reuseFork=true和forkCount=1
编辑:reuseFork=true和forkCount=1上的StackTrace
checkForReturnEventsPresent on checkForReturnEventsPresent(com.eras.senders.OMSReturnEventDataSenderTest)(com.eras.senders.OMSReturnEventDataSenderTest) Time elapsed: 0.014 sec <<< FAILURE!
java.lang.IllegalArgumentException: null
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:115)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeMulti(TestNGDirectoryTestSuite.java:212)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:108)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:111)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
checkForReturnEventsPresent on checkForReturnEventsPresent(com.eras.senders.OMSReturnEventDataSenderTest)(com.eras.senders.OMSReturnEventDataSenderTest)经过的时间:0.014秒
在我的项目中,当我设置reuseForks=true时,我必须将forkCount增加到测试类的数量。否则,它将抛出illegalargument异常
从堆栈跟踪来看,代码中似乎有什么东西导致抛出异常,但只有在重用fork时才会抛出异常。这意味着不同的测试在某种程度上不是相互隔离的,因此在同一测试过程中一个接一个地运行违反了一些假设。例如,可能一个测试初始化了某个全局状态(如单例),然后该全局状态对于该进程中的下一个测试运行是不正确的
另外,如果我设置reuseForks=false,那么它也可以正常工作
通过将reuseForks
设置为false
,任何与这样的全局状态变化相关的问题都将被忽略。该进程在测试运行结束时被拆毁,并为下一次测试运行启动一个状态为fresh的新进程
在这一点上,前进的道路高度依赖于代码库的细节及其测试的实现方式。我看到两种选择:
调试测试,查找全局状态的问题,如我所述。在此异常之前附加断点可能会给您一个强烈的提示
如果您已经知道代码库依赖于某个全局状态,并且快速更改该代码是不可行的,那么只需将reuseForks
设置为false
。在许多情况下,额外的进程拆卸和启动不会对整个测试运行造成明显的性能影响
能否为您看到的IllegalArgumentException
添加完整的错误或堆栈跟踪?我无法在本地复制它。@ChrisNauroth我在reuseFork=true和forkCount=1上添加了stacktrace。即使我有一个测试用例,我也必须保持forkCount=2。