1

私のプロジェクトは Ant を使用しており、いくつかのテスト スイートがあります。各スイートは同様の方法で実行されるため、マクロが定義されています。

<macrodef name="exec-tests">
    <attribute name="test-suite" />
    <element name="test-run" implicit="yes" />
    <sequential>
        <junit printsummary="yes" haltonfailure="true" haltonerror="true" showoutput="true" outputtoformatters="true" fork="true" maxmemory="512m">
            <jvmarg value="-XX:MaxPermSize=256m" />
            <jvmarg value="-Xmx512m" />
            <jvmarg value="-Xms512m" />
            <classpath refid="test.run.class.path" />
            <formatter type="plain" usefile="false" />
            <formatter type="xml" usefile="true" />
            <test name="@{test-suite}" todir="${test.build.results.dir}" />
        </junit>
    </sequential>
</macrodef>

したがって、次のように異なるスイートを実行するターゲットがいくつかあります。

<target name="run-xxx-tests" depends="build-tests">
    <exec-tests test-suite="com.mycompany.XxxTestsSuite" />
</target>

<target name="run-yyy-tests" depends="build-tests">
    <exec-tests test-suite="com.mycompany.YyyTestsSuite" />
</target>

また、Jacoco カバレッジでテスト スイートを実行したいと考えています。したがって、これを行うといいでしょう:

<target name="run-xxx-tests-with-coverage" depends="build-tests">
    <jacoco:coverage destfile="${test.coverage.unit.file}">
        <exec-tests test-suite="com.mycompany.XxxTestsSuite" />
    </jacoco:coverage>
</target>

ただし、エラーが発生しているため、Jacoco はカバレッジ タグ内のマクロをサポートしていないようです。

Caused by: C:\Users\taavi\projects\cds\build.xml:87: exec-tests is not a valid child of the coverage task
    at org.jacoco.ant.CoverageTask.addTask(CoverageTask.java:68)
    at org.apache.tools.ant.UnknownElement.handleChildren(UnknownElement.java:367)

今のところ、「exec-tests」に非常に似ていますが、カバレッジを追加するだけの別のマクロ定義を作成しました。重要ではありませんが、この「junit」タスク部分の重複を回避する方法はあるのでしょうか?

k6ps

4

1 に答える 1

2

<jacoco:coverage>タスクには、役立つ可能性のあるenabled属性があります...

true に設定すると、含まれるタスクのカバレッジ データが収集されます。

を使用するenabledには、次のようにいくつかの変更を加えることができます<exec-tests>

  • そこに移動<jacoco:coverage>します
  • オプションのcoverage.destfile属性を追加する

どのように見えるでしょうか...

<macrodef name="exec-tests">
    <attribute name="test-suite" />
    <!-- If <test-suite> is called without coverage.destfile, then -->
    <!-- coverage.enabled won't be set to true and coverage info won't -->
    <!-- be collected.  -->
    <attribute name="coverage.destfile" default="" />
    <element name="test-run" implicit="yes" />
    <sequential>
        <local name="coverage.enabled" />
        <condition property="coverage.enabled" value="false" else="true">
            <equals arg1="@{coverage.destfile}" arg2="" />
        </condition>
        <jacoco:coverage enabled="${coverage.enabled}" destfile="@{coverage.destfile}">
            <junit ...>
            ...
            </junit>
        </jacoco:coverage>
    </sequential>
</macrodef>

次に、各テストでカバレッジ情報を収集する必要があるかどうかを指定できます...

<exec-tests
    test-suite="com.mycompany.XxxTestsSuite"
    coverage.destfile="${test.coverage.unit.file}" />

上記の例では、 が提供されているため、カバレッジ情報が収集さcoverage.destfileれます。

于 2015-10-20T16:25:25.287 に答える