Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven surefire:我们什么时候被迫设置reuseForks=false?_Java_Maven_Testng_Junit4_Maven Surefire Plugin - Fatal编程技术网

Java maven surefire:我们什么时候被迫设置reuseForks=false?

Java 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

在我的项目中,当我设置reuseForks=true时,我必须将forkCount增加到测试类的数量。否则,它将抛出illegalargument异常。 另外,如果我设置了reuseForks=false,那么它也可以正常工作

目前我有以下配置,因为测试类的数量少于10

        <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=trueforkCount=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。