Ant可以进行自动化建构,而JUnit可以进行自动化测试,Ant可以与JUnit结合,使得自动化的建构与测变得可行。

  我们使用之前的测试案例来示范如何将Ant结合JUnit以进行自动化建构与测试,之前的测试案例是:
​​​http://www.caterpillar.onlyfun.net/phpBB2/viewtopic.php?t=981​​​

  Ant使用<junit>任务来设定JUnit测试,下面直接示范一个简单的例子:

<project name="autobuildtest" default="test">
<!--设置目录-->
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
</target>
<!--重置(清空)已编译目录-->
<target name="prepareDir" depends="setProperties">
<delete dir="${classes.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>
<!--编译-->
<target name="compile" depends="prepareDir">
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>
<!--JUnit测试-->
<target name="test" depends="compile">
<junit printsummary="yes">
<test name="ObjectIOManagerTest"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>
</project>


printsummary属性会将测试的结果简单的显示出来,<test>的name属性是设定要进行测试的案例类别,Ant建构与调用JUnit进行测试的讯息如下:

Buildfile: build.xml 

setProperties:

prepareDir:
[mkdir] Created dir: D:/temp/classes

compile:
[javac] Compiling 3 source files to D:/temp/classes

test:
[junit] Running ObjectIOManagerTest
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.14 sec


BUILD SUCCESSFUL
Total time: 7 seconds


您也可以将JUnit的测试过程在Ant建构的过程讯息中显示出来,只要加入<formatter>标签设定即可:

<project name="autobuildtest" default="test"> 
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
</target>

<target name="prepareDir" depends="setProperties">
<delete dir="${classes.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>

<target name="compile" depends="prepareDir">
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>

<target name="test" depends="compile">
<junit printsummary="yes">
<formatter type="plain" usefile="false"/>
<test name="ObjectIOManagerTest"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>
</project>


Ant建构与调用JUnit进行测试的讯息如下:

Buildfile: build.xml 

setProperties:

prepareDir:
[mkdir] Created dir: D:/temp/classes

compile:
[javac] Compiling 3 source files to D:/temp/classes

test:
[junit] Running ObjectIOManagerTest
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.18 sec

[junit] Testsuite: ObjectIOManagerTest
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.18 sec
[junit] ------------- Standard Output ---------------
[junit] Writing data to test.dat ... done
[junit] Reading data from test.dat ... done
[junit] Writing data to test.dat ... done
[junit] Reading data from test.dat ... done
[junit] ------------- ---------------- ---------------

[junit] Testcase: testSimpleObjectIO took 0.09 sec
[junit] Testcase: testStudentObjectIO took 0.08 sec


BUILD SUCCESSFUL
Total time: 8 seconds


<formatter>标签还可以设定将测试的结果,以XML文件储存下来,一个撰写的例子如下,它将测试的结果储存至report目录中,文件名称为TEST-*.xml,*是您的测试案例类别名称:

<project name="autobuildtest" default="test"> 
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
<property name="report.dir" value="report"/>
</target>

<target name="prepareDir" depends="setProperties">
<delete dir="${report.dir}"/>
<delete dir="${classes.dir}"/>
<mkdir dir="${report.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>

<target name="compile" depends="prepareDir">
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>

<target name="test" depends="compile">
<junit printsummary="yes">
<formatter type="xml"/>
<test name="ObjectIOManagerTest" todir="${report.dir}"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>
</project>


您也可以将测试结果所产生的XML文件转换为HTML文件,使用Ant可以直接帮您完成这个工作,<junitreport>标签使用XSLT将XML文件转换为HTML文件,一个撰写的例子如下所示:

<project name="autobuildtest" default="report"> 
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
<property name="report.dir" value="report"/>
</target>

<target name="prepareDir" depends="setProperties">
<delete dir="${report.dir}"/>
<delete dir="${classes.dir}"/>
<mkdir dir="${report.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>

<target name="compile" depends="prepareDir">
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>

<target name="test" depends="compile">
<junit printsummary="yes">
<formatter type="xml"/>
<test name="ObjectIOManagerTest" todir="${report.dir}"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>

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


<include>设定搜寻TEST-*.xml文件,将之转换为HTML文件,而最后的结果我们设定储存至report/html/目录下,format属性中我们设定HTML文件具有框架,如果不设定这个属性则HTML报告文件就不具有框架。

答复但是