2015-03-02 201 views
2

我正在使用mockito 1.8.3,jacoco 0.72和maven 3.0.5 surefire插件(2.12.4)來執行單元測試並生成覆蓋報告,它工作正常。Mockito,jacoco和surefire導致內存不足

隨着越來越多的測試被添加,它開始不工作。在測試執行期間,我不斷遇到內存不足的錯誤,並且找不到找出錯誤的方法。

我使用mockito作爲嘲笑工具,大約有1800多個測試用例。如果我在測試階段之前未使用「org.jacoco:jacoco-maven-plugin:prepare-agent」在maven測試期間運行jacoco,但工作正常,但只要我添加jacoco代理,就會發現與PermGen已滿的OOO問題。

我已經通過修改MAVEN_OPTS(它不應該工作,因爲surefire會分叉一個新的進程)和surefire argline參數在POM中添加到2GB的PermGen,但它沒有什麼幫助。

我試圖通過向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> 

回答

4

你需要設置內存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> 
+0

謝謝,它正在工作。不知道爲什麼我使用的「財產」格式不起作用。 – Skywolf 2015-03-03 06:27:48

1

如果您有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>