3

jacoco、ant、teamcityを使用して、プロジェクトにコードカバレッジを統合しようとしていました。しかし、jacocoタスクがjunitタスクの周りにある場合、teamcityは失敗したテストをキャッチせず、テストが失敗してもすべてが成功することに気付きました。

これが、jacocoの有無にかかわらずテストし、teamcityの動作を確認するための2つのテストタスクです。

1-ジャココを有効にした

<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-ジャココなし

<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タスクのみです。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はビルドの成功を報告しています。

なぜ私がこの振る舞いをしたのか、何か考えはありますか?ありがとう

4

2 に答える 2

1

答えは、JUnit-Task への呼び出しに隠されています。

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

この構成では、JUnit タスクは失敗したテストでビルドに失敗しません。これにより、望ましい動作が得られるはずです。

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

JUnit タスクの構成については、 Antの資料を参照してください。

于 2013-02-22T16:58:37.483 に答える