前提:
1、了解Ant编译打包的基本知识。
2、了解Junit的测试框架,知道junit3和junit4的区别,会编写测试案例。
3、了解Maven的目录结构以及依赖关系。
正题:
例子1: ant1.9.7 + junit4.12
bulid.xml 内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<project name="junit-test" default="unit-test-report">
<!-- 源码目录 -->
<property name="src.main.dir" location="${basedir}/src/main/java" />
<property name="src.test.dir" location="${basedir}/src/test/java" />
<!-- 编译目录 -->
<property name="target.classes.dir" location="${basedir}/target/classes" />
<property name="target.test-classes.dir" location="${basedir}/target/test-classes" />
<!-- jar目录 -->
<property name="junit.lib.dir" location="${basedir}/src/main/webapp/WEB-INF/lib" />
<!-- 报告目录 -->
<property name="target.report.dir" location="${basedir}/target" />
<property name="target.unit-test-report.dir" location="${target.report.dir}/junit-report" />
<!-- 编译测试类依赖的classpath -->
<path id="app.classpath">
<fileset dir="${junit.lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<!-- 运行测试类需要的classpath -->
<path id="app.test.classpath">
<path location="${target.test-classes.dir}" />
</path>
<!-- 删除旧的测试目录及文件 -->
<target name="clean">
<delete dir="${target.classes.dir}" />
<delete dir="${target.test-classes.dir}" />
<delete dir="${target.unit-test-report.dir}" />
</target>
<!-- 编译源文件 -->
<target name="compile-java" depends="clean">
<mkdir dir="${target.classes.dir}" />
<!-- 编译源文件目录,编译目标目录 -->
<javac srcdir="${src.main.dir}" destdir="${target.classes.dir}" debug="on" source="1.6" includeantruntime="on">
<classpath refid="app.classpath">
</classpath>
</javac>
</target>
<!-- 编译测试文件 -->
<target name="compile-test" depends="compile-java">
<mkdir dir="${target.test-classes.dir}" />
<!-- 编译源文件目录,编译目标目录 -->
<javac srcdir="${src.test.dir}" destdir="${target.test-classes.dir}" debug="on" source="1.6" includeantruntime="on">
<classpath refid="app.test.classpath">
</classpath>
</javac>
<!-- 拷贝测试类路径下的配置文件 -->
<copy todir="${target.test-classes.dir}">
<fileset dir="${src.test.dir}">
<include name="**/*.properties" />
<include name="**/*.xml" />
</fileset>
</copy>
</target>
<!-- 运行测试类 -->
<target name="run-unit-test" depends="compile-test">
<mkdir dir="${target.unit-test-report.dir}" />
<!-- 设置运行失败是是否继续执行 (如果为true,则导出报表也会失败) -->
<junit printsummary="on" haltonerror="off" haltonfailure="off" fork="on">
<!-- 输出格式 -->
<formatter type="plain" usefile="off" />
<formatter type="xml" usefile="on" />
<!-- 单个测试 -->
<!--<test name="com.zf.test.HelloTest"></test> -->
<!-- 批量测试 -->
<batchtest todir="${target.unit-test-report.dir}">
<fileset dir="${target.test-classes.dir}">
<!--<include name="**/*Test.class" />-->
<include name="AssertTests.class" />
</fileset>
</batchtest>
<!-- 类路径 -->
<classpath refid="app.classpath">
</classpath>
<classpath refid="app.test.classpath">
</classpath>
</junit>
</target>
<!-- 单元测试报告 -->
<target name="unit-test-report" depends="run-unit-test">
<mkdir dir="${target.unit-test-report.dir}/html" />
<junitreport todir="${target.unit-test-report.dir}">
<fileset dir="${target.unit-test-report.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${target.unit-test-report.dir}/html" />
</junitreport>
</target>
</project>
例子2: ant1.9.7 + junit4.12+Maven3.2.5
本案例中由于使用了maven,所以编译运行时可以直接引用maven中的依赖,这个需要额外下载maven-ant-tasks-2.1.3 jar包,并放在ant的lib包下,当然也有其他方法可以引用依赖,此例不包含。
下载地址:https://mvnrepository.com/artifact/org.apache.maven/maven-ant-tasks/2.1.3
bulid.xml 内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<project name="junit-test" default="unit-test-report" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<!-- 源码目录 -->
<property name="src.main.dir" location="${basedir}/src/main/java" />
<property name="src.test.dir" location="${basedir}/src/test/java" />
<!-- 编译目录 -->
<property name="target.classes.dir" location="${basedir}/target/classes" />
<property name="target.test-classes.dir" location="${basedir}/target/test-classes" />
<!-- jar目录 -->
<property name="junit.lib.dir" location="${basedir}/src/main/webapp/WEB-INF/lib" />
<!-- 报告目录 -->
<property name="target.report.dir" location="${basedir}/target" />
<property name="target.unit-test-report.dir" location="${target.report.dir}/junit-report" />
<!-- 导入Maven的依赖 -->
<artifact:dependencies filesetId="dependency.fileset" scopes="provided, test">
<pom file="pom.xml" />
</artifact:dependencies>
<!-- 复制编译运行的jar包 -->
<copy todir="${junit.lib.dir}">
<fileset refid="dependency.fileset" />
<mapper type="flatten" />
</copy>
<!-- 编译测试类依赖的classpath -->
<path id="junit-lib">
<fileset dir="${junit.lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<path id="app.classpath">
<path location="${target.classes.dir}" />
</path>
<!-- 运行测试类需要的classpath -->
<path id="app.test.classpath">
<path location="${target.test-classes.dir}" />
</path>
<!-- 删除旧的测试目录及文件 -->
<target name="clean">
<delete dir="${target.classes.dir}" />
<delete dir="${target.test-classes.dir}" />
<delete dir="${target.unit-test-report.dir}" />
</target>
<!-- 编译源文件 -->
<target name="compile-java" depends="clean">
<mkdir dir="${target.classes.dir}" />
<!-- 编译源文件目录,编译目标目录 -->
<javac srcdir="${src.main.dir}" destdir="${target.classes.dir}" debug="on" source="1.6" includeantruntime="on">
<classpath refid="junit-lib">
</classpath>
</javac>
</target>
<!-- 编译测试文件 -->
<target name="compile-test" depends="compile-java">
<mkdir dir="${target.test-classes.dir}" />
<!-- 编译源文件目录,编译目标目录 -->
<javac srcdir="${src.test.dir}" destdir="${target.test-classes.dir}" debug="on" source="1.6" includeantruntime="on">
<classpath refid="junit-lib">
</classpath>
<classpath refid="app.classpath">
</classpath>
<classpath refid="app.test.classpath">
</classpath>
</javac>
<!-- 拷贝测试类路径下的配置文件 -->
<copy todir="${target.test-classes.dir}">
<fileset dir="${src.test.dir}">
<include name="**/*.properties" />
<include name="**/*.xml" />
</fileset>
</copy>
</target>
<!-- 运行测试类 -->
<target name="run-unit-test" depends="compile-test">
<mkdir dir="${target.unit-test-report.dir}" />
<!-- 设置运行失败是是否继续执行 (如果为true,则导出报表也会失败) -->
<junit printsummary="on" haltonerror="off" haltonfailure="off" fork="on">
<!-- 输出格式 -->
<formatter type="plain" usefile="off" />
<formatter type="xml" usefile="on" />
<!-- 单个测试
<test name="com.michael.junit4.CalculatorTest"></test>
-->
<!-- 批量测试 -->
<batchtest todir="${target.unit-test-report.dir}">
<fileset dir="${target.test-classes.dir}">
<include name="**/*Test.class" />
</fileset>
</batchtest>
<!-- 类路径 -->
<classpath refid="junit-lib">
</classpath>
<classpath refid="app.classpath">
</classpath>
<classpath refid="app.test.classpath">
</classpath>
</junit>
</target>
<!-- 单元测试报告 -->
<target name="unit-test-report" depends="run-unit-test">
<mkdir dir="${target.unit-test-report.dir}/html" />
<junitreport todir="${target.unit-test-report.dir}">
<fileset dir="${target.unit-test-report.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${target.unit-test-report.dir}/html" />
</junitreport>
</target>
</project>