Antでのjunit実行用ターゲット

djUnitでテストケース実行してユニットテストカバレッジのレポートを出力するAntの記述。
毎回忘れるのでメモ。

<!-- IFタスク用 -->
<taskdef classpath="./lib/antlib.jar" resource="net/sf/antcontrib/antlib.xml"/>
<taskdef classpath="./lib/djunit.jar" resource="djunittasks.properties"/>

<target name="test" description="ユニットテストを実行する.">
  <delete dir="${test.report.dir}" />
  <delete dir="${test.coverage.dir}" />
  <mkdir dir="${test.report.dir}" />
  <mkdir dir="${test.coverage.dir}" />

  <djunit printsummary="yes" targetsrcdir="${src.dir}" dir="${test.coverage.dir}"
    virtualmock="yes" coverage="yes" showoutput="yes">
    <classpath>
      <pathelement path="."/>
      <pathelement path="${classpath.test}"/>
      <pathelement path="${classpath.main}"/>
      <fileset dir="lib">
        <include name="*.jar"/>
      </fileset>
    </classpath>
    <formatter type="xml"/>
    <!-- djunitのhaltonerrorだと正常終了するので、error/failureの場合はプロパティに設定 -->
    <batchtest fork="yes" todir="${test.report.dir}"
      errorProperty="test.failed" failureProperty="test.failed">
      <fileset dir="${test.dir}">
        <include name="**/*Test.java"/>
      </fileset>
    </batchtest>
  </djunit>

  <junitreport>
    <fileset dir="${test.report.dir}">
      <include name="TEST-*.xml"/>
    </fileset>
    <report format="frames" todir="${test.report.dir}"/>
  </junitreport>

  <delete file="TESTS-TestSuites.xml"/>

  <fail message="Tests failed: check test reports." if="test.failed" />

  <if>
    <available file="${test.coverage.dir}/jcoverage.ser"/>
    <then>
      <djunit-coverage-report serFile="${test.coverage.dir}/jcoverage.ser"
        srcdir="${src.dir}" destdir="${test.coverage.dir}"
        charset="UTF-8" srcfileencoding="UTF-8">
        <classpath refid="classpath.lib"/>
      </djunit-coverage-report>
    </then>
  </if>
</target>