gpt4 book ai didi

java - maven surefire : when are we forced to set reuseForks=false?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:14 30 4
gpt4 key购买 nike

在我的项目中,当我设置 reuseForks=true 时,我必须将 forkCount 增加到测试类的数量。否则,它抛出非法参数异常。另外,如果我设置 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>

如何保持 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)

最佳答案

In my project when I set reuseForks=true then i have to increase the forkCount to number of test classes. Otherwise, It is throwing illegalargument exception.

从堆栈跟踪来看,您的代码中似乎有什么东西导致异常被抛出,但只有在重用 fork 时才会抛出异常。这意味着不同的测试在某种程度上并不是彼此隔离的,因此在同一测试过程中一个接一个地运行违反了一些假设。例如,也许一个测试像单例一样初始化了一些全局状态,然后该全局状态对于该进程中的下一个测试运行是不正确的。

Also, If I set reuseForks=false then it also work fine.

通过将 reuseForks 设置为 false,可以绕过任何与改变全局状态相关的问题。该流程在测试运行结束时被拆除,并为下一次测试运行启动一个具有全新状态的新流程。

在这一点上,前进的道路在很大程度上取决于您的代码库的细节及其测试的实现方式。我看到 2 个选项:

  1. 调试您的测试以查找我所描述的全局状态问题。在此异常之前附加一个断点可能会给您一个强烈的提示。
  2. 如果您已经知道代码库依赖于某些全局状态,并且快速更改该代码是不可行的,那么只需将 reuseForks 设置为 false .在许多情况下,额外的进程拆卸和启动不会对您的整体测试运行造成明显的性能影响。

关于java - maven surefire : when are we forced to set reuseForks=false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684482/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com