2013-02-22 2 views
3

Я пытался интегрировать покрытие кода в свой проект, используя jacoco, ant и teamcity. Тем не менее, я понял, что, когда задача jacoco находится вокруг задачи junit, teamcity не ломает неудачные тесты, и все происходит успешно, даже если тест не прошел.Неудачный тест junit, не улавливаемый командой, при использовании jacoco

Вот мои 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-Task:

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

С помощью этой конфигурации, задача JUnit не подведет сборки на непройденных тестов. Это должно привести к желаемому поведению:

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

См Ant документации для конфигурации задачи JUnit.

+0

Этот параметр работает, чтобы сделать полную сборку неудачной сборкой. Однако информация о том, какие тесты не удались и какие из них преуспели, теряется. – user2100163

+0

В таком случае вы должны проверить конфигурацию города команды. Ваш вопрос звучал сначала для меня, как будто вы хотели, чтобы сборка потерпела неудачу. – Markus

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> 

задача Agent использует те же свойства, что и задачи покрытия. Затем вы можете запустить задачу junit, не упаковывая ее в задачу покрытия. Таким образом teamcity может перехватывать задачу junit.

 Смежные вопросы

  • Нет связанных вопросов^_^