Antでdjunitを実行する

Antでdjunitを実行した時のメモ

必要なJarファイル

(「jp.co.dgic.eclipse.jdt.djunit_0.8.3」からコピー)

asm-3.0.jar
bcel-5.2.jar
djunit.jar
jakarta-oro-2.0.7.jar
jcoverage-djunit-1.0.5.jar
junit-4.4.jar

build.xml

<?xml version="1.0"?>

<project default="build" basedir=".">

	<!-- プロパティ定義 -->
	<property name="home.dir" value="." />
	<property name="lib.dir" value="${home.dir}/lib" />
	<property name="src.dir" value="${home.dir}/src" />
	<property name="test.dir" value="${home.dir}/test" />
	<property name="class.dir" value="${home.dir}/bin" />
	<property name="dist.dir" value="${home.dir}/release" />
	<property name="doc.dir" value="${home.dir}/doc" />
	<property name="javadoc.dir" value="${doc.dir}/javadoc" />
	<property name="report.dir" value="${doc.dir}/report" />
	<property name="junit.report.dir" value="${report.dir}/junit" />
	<property name="jcoverage.report.dir" value="${report.dir}/jcoverage" />
	<property name="wk.dir" value="${home.dir}/work" />
	<property name="junit.wk.dir" value="${wk.dir}/junit" />
	<property name="jcoverage.wk.dir" value="${wk.dir}/jcoverage" />
	<property name="app.name" value="db_access" />
	<property file="jdbc.properties" />

	<!-- タイムスタンプ -->
	<tstamp>
		<format property="SYSTIMESTAMP" pattern="yyyy-MM-dd HH:mm:ss.SSS" locale="en" />
	</tstamp>

	<!-- クラスパス定義 -->
	<path id="class.path">
		<fileset dir="${lib.dir}">
			<include name="*.jar" />
		</fileset>
	</path>

	<!-- タスク定義 -->
	<taskdef resource="djunittasks.properties" classpathref="class.path" />
	<taskdef name="dbunit" classname="org.dbunit.ant.DbUnitTask" classpathref="class.path" />

	<!-- 初期処理 -->
	<target name="init">
		<mkdir dir="${home.dir}" />
		<mkdir dir="${lib.dir}" />
		<mkdir dir="${src.dir}" />
		<mkdir dir="${test.dir}" />
		<mkdir dir="${class.dir}" />
		<mkdir dir="${dist.dir}" />
		<mkdir dir="${doc.dir}" />
		<mkdir dir="${javadoc.dir}" />
		<mkdir dir="${report.dir}" />
		<mkdir dir="${junit.report.dir}" />
		<mkdir dir="${jcoverage.report.dir}" />
	</target>

	<!-- コンパイル -->
	<target name="build" depends="init">
		<javac srcdir="${src.dir}" destdir="${class.dir}" debug="on" />
	</target>

	<!-- Jar生成 -->
	<target name="makeJar" depends="build">
		<jar destfile="${dist.dir}/${app.name}.jar">
			<fileset dir="${class.dir}">
				<exclude name="*/**/*Test*" />
			</fileset>
		</jar>
	</target>

	<!-- SQL実行 -->
	<target name="exeSql">
		<sql driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.user}" password="${jdbc.password}" classpathref="class.path" print="true" onerror="continue">
			DROP TABLE SAMPLE01;
			CREATE TABLE SAMPLE01 (
				ID             NUMBER(5) PRIMARY KEY,
				COL_CHAR       CHAR(5),
				COL_VARCHAR2   VARCHAR2(20),
				COL_NUMBER     NUMBER(5),
				COL_DATE       DATE,
				COL_TIMESTAMP  TIMESTAMP
			);
			INSERT INTO SAMPLE01 VALUES (1, 'XXXX1', 'XXXXXXXXX1', 1, TO_DATE('2008-07-01', 'YYYY-MM-DD'), TO_DATE('2008-07-01', 'YYYY-MM-DD'));
			INSERT INTO SAMPLE01 VALUES (2, 'XXXX2', 'XXXXXXXXX2', 2, TO_DATE('2008-07-02', 'YYYY-MM-DD'), TO_DATE('2008-07-02', 'YYYY-MM-DD'));
			INSERT INTO SAMPLE01 VALUES (3, 'XXXX3', 'XXXXXXXXX3', 3, TO_DATE('2008-07-03', 'YYYY-MM-DD'), TO_DATE('2008-07-03', 'YYYY-MM-DD'));
			
			DROP TABLE SAMPLE02;
			CREATE TABLE SAMPLE02 (
				ID        NUMBER(5) PRIMARY KEY,
				COL_BLOB  BLOB
			);
			INSERT INTO SAMPLE02 VALUES (1, EMPTY_BLOB());
		</sql>
	</target>

	<!-- djunitを実行 -->
	<target name="djunit" depends="test.init">
		<!-- テストを実行して結果をXMLファイルとして出力 -->
		<djunit printsummary="yes" targetsrcdir="${src.dir}" coverage="yes" virtualMock="yes" haltonfailure="no">
			<classpath>
				<pathelement location="${class.dir}" />
				<path refid="class.path" />
			</classpath>
			<formatter type="xml" />
			<batchtest fork="yes" todir="${junit.wk.dir}">
				<fileset dir="${test.dir}">
					<include name="**/*Test*.java" />
				</fileset>
			</batchtest>
		</djunit>
	</target>

	<!-- Report[JUnit]を生成 -->
	<target name="junit.report" depends="djunit">
		<!-- 古いファイルを削除 -->
		<delete dir="${junit.report.dir}" />
		<mkdir dir="${junit.report.dir}" />
		<!-- XMLファイルを基にHTML形式のレポートを出力 -->
		<junitreport todir="${junit.report.dir}">
			<fileset dir="${junit.wk.dir}">
				<include name="TEST-*.xml" />
			</fileset>
			<report format="frames" todir="${junit.report.dir}" />
		</junitreport>
		<!-- HTMLへタイムスタンプを設定 -->
		<replace file="${junit.report.dir}/index.html" token="Unit Test Results" value="Unit Test Results - ${SYSTIMESTAMP}" />
	</target>

	<!-- Report[JCoverage]を生成 -->
	<target name="jcoverage.report" depends="junit.report">
		<!-- 古いファイルを削除 -->
		<delete dir="${jcoverage.report.dir}" />
		<mkdir dir="${jcoverage.report.dir}" />
		<!-- HTML形式のレポートを出力 -->
		<djunit-coverage-report serFile="./jcoverage.ser" srcdir="${src.dir}" destdir="${jcoverage.report.dir}">
			<classpath refid="class.path" />
		</djunit-coverage-report>
		<!-- HTMLへタイムスタンプを設定 -->
		<replace file="${jcoverage.report.dir}/index.html" token="Coverage Report" value="Coverage Report - ${SYSTIMESTAMP}" />
	</target>

	<!-- テスト前処理 -->
	<target name="test.init">
		<delete dir="${wk.dir}" />
		<mkdir dir="${wk.dir}" />
		<mkdir dir="${jcoverage.wk.dir}" />
		<mkdir dir="${junit.wk.dir}" />
	</target>

	<!-- テスト実行 -->
	<target name="test" depends="jcoverage.report">
		<delete dir="${wk.dir}" />
	</target>

	<!-- DBUnitで使用するXMLを生成 -->
	<target name="export.dbunit">
		<dbunit driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.user}" password="${jdbc.password}" schema="SCOTT">
			<export dest="export.xml" />
		</dbunit>
	</target>

</project>