ch09-ant
首先下载ant包,配置ANT_HOME变量,将%ANT_HOME%\bin加入PATH中。为了方便,将junit.jar放入%ANT_HOME%\lib中
如果junit的版本是4.8之后,还需要放入hamcrest-core-1.3.jar
build.xml构建文件
<!--指定项目名称,设定默认的任务,设定基目录的绝对路径-->
<project name="ch09-ant" default="test" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
<!--引入属性文件-->
<property file="build.properties" /><!---->
<!--定义产品和测试的java源文件路径-->
<property name="src.dir" location="src" />
<property name="src.java.dir" location="${src.dir}/java" />
<property name="src.test.dir" location="${src.dir}/test" />
<!--定义产品和测试的java编译文件路径-->
<property name="target.dir" location="target" />
<property name="target.classes.java.dir" location="${target.dir}/classes/java" />
<property name="target.classes.test.dir" location="${target.dir}/classes/test" />
<!--定义测试结果报告文件路径-->
<property name="target.report.dir" location="${target.dir}/report" />
<!--定义产品的javac任务-->
<target name="compile.java">
<!--创建目录-->
<mkdir dir="${target.classes.java.dir}" />
<javac destdir="${target.classes.java.dir}" includeantruntime="true">
<src path="${src.java.dir}" />
</javac>
</target>
<!--定义测试的javac任务-->
<target name="compile.test" depends="compile.java">
<!--创建目录-->
<mkdir dir="${target.classes.test.dir}" />
<javac destdir="${target.classes.test.dir}" includeantruntime="true">
<src path="${src.test.dir}" />
<classpath>
<pathelement location="${target.classes.java.dir}" />
</classpath>
</javac>
</target>
<target name="compile" depends="compile.java,compile.test" />
<!--创建测试任务-->
<target name="test" depends="compile">
<!--创建测试结果报告目录-->
<mkdir dir="${target.report.dir}" />
<!--printsummary="yes"会使任务在测试的最后会输出一个单行的摘要-->
<!--fork="yes"可以强制为每个测试使用一个独立的JVM,这是非常有必要的因为我们不希望测试结束的时候应用程序也被关闭了-->
<!--haltonerror和haltonfailure="yes"表明如果任何结果测试返回一个错误或者一个失败就停止构建-->
<!--在Ant中错误是指意料之外的错误,类似于异常,而失败是指失败的断言-->
<junit printsummary="yes" haltοnerrοr="yes" haltonfailure="yes" fork="yes">
<!--配置junit任务的格式程序来使用纯文本格式,并将测试结果输出到控制台-->
<formatter type="plain" usefile="false" />
<!--配置junit任务以XML文件格式输出结果-->
<formatter type="xml" />
<test name="com.manning.junitbook.ch09.ant.TestDefaultController" todir="${target.report.dir}" />
<!--在类路径中添加刚刚编译的产品类和测试类-->
<classpath>
<pathelement location="${target.classes.java.dir}" />
<pathelement location="${target.classes.test.dir}" />
</classpath>
</junit>
</target>
<!--使用XSL将XML格式的测试结果转换为HTML报告-->
<target name="report" depends="test">
<mkdir dir="${target.report.dir}/html" />
<junitreport todir="${target.report.dir}">
<fileset dir="${target.report.dir}">
<include name="TEST-*.xml" />
</fileset>
<report todir="${target.report.dir}/html" />
</junitreport>
</target>
</project>
在eclipse中运行test任务 报错
[junitreport] : Error! 非 static Java 函数 'replace' 的第一个参数不是有效的对象引用。
[junitreport] : Error! 无法将数据类型 'void' 转换为 'reference'。
[junitreport] : Fatal Error! 无法编译样式表
选中build.xml右键Run As==>External Tools Configuration==>classpath中设置自己的Ant Home
我的Ant Home中另外加了junit-4.11.jar , hamcrest-core-1.3.jar ,ivy-2.3.0.jar
在执行,报错说找不到hamcrest-core-1.3.jar ,明明已经放入classpath中了。无奈使用iv管理依赖项
ivy.xml
<?xml version="1.0"?>
<ivy-module version="2.0">
<info organisation="junitbook" module="sampling-ivy"/>
<dependencies>
<dependency org="junit" name="junit" rev="4.11"/>
</dependencies>
</ivy-module>
在只用ivy之后,归档文件会保存在项目的lib文件中
在build.xml中加入
<property name="lib" location="lib" />
<path id="build.classpath">
<fileset dir="${lib}">
<include name="*.jar" />
</fileset>
</path>
<ivy:retrieve file="ivy.xml" sync="true" />
然后为各个任务增加classpath
<classpath refid="build.classpath" />
执行,成功,生成html格式的报告
在执行多个测试类时,可以使用批处理测试简化操作
将test标签替换为batchtest
<batchtest todir="${target.report.dir}">
<fileset dir="${src.test.dir}">
<include name="**/${tests}.java"/>
<exclude name="**/Test*All.java"/>
</fileset>
</batchtest>