Mockito,jacoco和surefire导致内存不足

时间:2015-03-02 10:07:37

标签: maven mockito jacoco surefire

我正在使用mockito 1.8.3,jacoco 0.72和maven 3.0.5 surefire插件(2.12.4)执行单元测试并生成覆盖率报告,它工作正常。

随着越来越多的测试被添加,它开始不起作用。我在测试执行期间不断遇到内存不足错误,无法找到解决问题的方法。

我有大约1800多个测试用例,mockito作为模拟工具。如果我在使用" org.jacoco进行maven测试期间不运行jacoco,它工作正常:jacoco-maven-plugin:prepare-agent"在测试阶段之前,但只要我添加jacoco代理,我就得到了PermGen的OOO问题。

我已经通过修改MAVEN_OPTS(由于surefire将分叉一个新进程不应该工作)和pom中的surefire argline参数将PermGen添加到2GB,但它没有多大帮助。

我试图通过向surefire插件添加参数来获取OOO时的核心转储,但从未在任何文件夹中看到转储文件。我怀疑我的JVM设置不适用于surefire插件,但不确定是什么问题。有人可以帮我一个忙吗?感谢。

            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire.version}</version>
                <inherited>true</inherited>
                <configuration>
                    <properties>
                        <property>
                            <name>argLine</name>                                    <value>-server -ea -XX:-UseSplitVerifier -XX:MaxPermSize=2g -Xmx3g -XX:+HeapDumpOnOutOfMemoryError </value>
                        </property>
                        <property>
                            <name>forkMode</name>
                            <value>once</value>
                        </property>
                        <property>
                            <name>reportFormat</name>
                            <value>plain</value>
                        </property>
                        <property>
                            <name>skipTests</name>
                            <value>${maven.test.skip}</value>
                        </property>
                    </properties>
                </configuration>
            </plugin>

2 个答案:

答案 0 :(得分:5)

您需要为maven-surefire-plugin设置内存,如下所示:

<plugins>
[...]
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <forkCount>3</forkCount>
        <reuseForks>true</reuseForks>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
        <systemPropertyVariables>
            <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
        </systemPropertyVariables>
    </configuration>
  </plugin>
[...]
</plugins>

答案 1 :(得分:2)

如果您将jacoco与maven failsafe plugin一起配置,那么您还需要将内存参数传递给那个:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-failsafe-plugin</artifactId>
   <version>2.14.1</version>
   <configuration>
      <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
   </configuration>
</plugin>