2013-02-22 58 views
3

我試圖通過使用jacoco,ant和teamcity將代碼覆蓋率集成到我的項目中。但是,我意識到,當jacoco任務圍繞着junit任務時,teamcity不會抓住失敗的測試,即使測試失敗,一切都會成功。使用jacoco時未能通過teamcity捕獲失敗的junit測試

這裏是我的2個測試任務,測試有沒有jacoco和看teamcity bahaviours。

1-與jacoco激活

<target name="-test"> 
    <echo message="JaCoCo activated"/> 
    <!-- Import the JaCoCo Ant Task --> 
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"/> 
    <!-- Run your unit tests, adding the JaCoCo agent --> 
    <jacoco:coverage destfile="${bin}/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant"> 
     <junit fork="yes" printsummary="yes" haltonfailure="no" showoutput="false" failureProperty="test.failed" errorProperty="test.failed"> 
      <classpath> 
       <path location="${lib}/${projectName}.jar"/> 
       <path refid="project.classpath"/> 
      </classpath> 
      <formatter type="xml"/> 
      <batchtest todir="${reportingHome}"> 
       <fileset dir="${test}"> 
        <include name="**/*Test.java"/> 
       </fileset> 
      </batchtest> 
     </junit> 
    </jacoco:coverage> 
    <copy todir="${completeReportDir}" overwrite="true"> 
     <fileset dir="${reportingHome}"> 
      <include name="*.xml"/> 
     </fileset> 
    </copy> 
</target> 

2-而不jacoco

<target name="-test"> 
    <echo message="JaCoCo activated"/> 
    <!-- Import the JaCoCo Ant Task --> 
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"/> 
    <!-- Run your unit tests, adding the JaCoCo agent --> 
    <!--<jacoco:coverage destfile="${bin}/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant">--> 
     <junit fork="yes" printsummary="yes" haltonfailure="no" showoutput="false" failureProperty="test.failed" errorProperty="test.failed"> 
      <classpath> 
       <path location="${lib}/${projectName}.jar"/> 
       <path refid="project.classpath"/> 
      </classpath> 
      <formatter type="xml"/> 
      <batchtest todir="${reportingHome}"> 
       <fileset dir="${test}"> 
        <include name="**/*Test.java"/> 
       </fileset> 
      </batchtest> 
     </junit> 
    <!--</jacoco:coverage>--> 
    <copy todir="${completeReportDir}" overwrite="true"> 
     <fileset dir="${reportingHome}"> 
      <include name="*.xml"/> 
     </fileset> 
    </copy> 
</target> 

只有jacoco任務已註釋的2釋放試驗的之間。 TeamCity的輸出

[CommonBuildTasks.-test] echo 
[08:26:21]: [echo] JaCoCo activated 
[08:26:21]: [CommonBuildTasks.-test] jacoco:coverage (4s) 
[08:26:21]: [jacoco:coverage] Enhancing junit with coverage. 
[08:26:22]: [jacoco:coverage] Running ca.thalesgroup.socialnetworkanalysisorchestrator.impl.client.SocialNetworkAnalysisOrchestratorServiceProviderTest 
[08:26:25]: [jacoco:coverage] Tests run: 2, Failures: 1, Errors: 0, Time elapsed: 3.511 sec 
[08:26:26]: [jacoco:coverage] Test ca.thalesgroup.socialnetworkanalysisorchestrator.impl.client.SocialNetworkAnalysisOrchestratorServiceProviderTest FAILED 
[08:26:26]: [CommonBuildTasks.-test] copy 
[08:26:26]: [copy] Copying 1 file to C:\TeamCity\buildAgent\work\cc10e09e43249f57\reports 

正如你所看到的,測試失敗,但TeamCity的報告了全成構建。

任何想法,爲什麼我得到了這種行爲? 感謝

回答

1

答案就藏在你的電話到了JUnit任務:

<junit haltonfailure="no">...</junit> 

利用這種結構,JUnit的任務不會失敗上測試失敗的構建。這應該會導致所需的行爲:

<junit haltonfailure="yes">...</junit> 

請參閱的JUnit任務的配置Ant文檔。

+0

此選項可用於將完整構建作爲失敗構建。但是,關於哪些測試失敗以及哪些測試成功的信息會丟失。 – user2100163 2013-02-22 19:20:50

+0

在這種情況下,你應該檢查你的團隊城市配置也許。你的問題首先聽起來像你想要構建失敗。 – Markus 2013-02-22 19:26:36

1

我通過使用代理任務而不是覆蓋任務解決了此問題。所以,與其

<jacoco:coverage destfile="${bin}/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant"> 

用途:

<jacoco:agent property="agentvmparam" destfile="${bin}/jacoco.exec"/> 
<junit fork="yes"... 
    <jvmarg value="${agentvmparam}"/> 
</junit> 

代理任務使用相同的屬性覆蓋任務。然後,你可以開始你的junit任務,而不需要將其包含在覆蓋任務中。通過這種方式,團隊可以攔截junit任務輸出。

相關問題