Ant编译与执行Junit测试

Apache Ant简介

简单的讲,Ant是一个命令行工具,可以用来编译java文件,执行java程序,生成jar文件,执行测试等。

具体参见http://ant.apache.org/

1.Ant的配置

(1)下载Ant

http://ant.apache.org/bindownload.cgi

下载解压后放在某路径下,例如:C:apache-ant-1.8.2

(2)配置环境变量

追加系统环境变量:“ANT_HOME”,值:“C:apache-ant-1.8.2”

在系统环境变量“Path”里追加“C:apache-ant-1.8.2in”

(3)验证配置是否正确

在命令行输入“ant -version”

如果显示“Apache Ant(TM) version 1.8.2 compiled on December 20 2010”,说明正确

2.创建build.xml文件

用XML编写,至少包含一个project和一个target.

以下面这个build.xml为例说明

主要任务:

(1)正式source文件(src目录下)和Junit测试(test目录下)文件可以分别编译。

(2)生成jar文件,并且不包含测试文件。

(3)通过ant执行Junit测试,生成测试报告。

编写思路:

(1)根据上述任务,至少需要编写4个target

target1:compile,编译正式source文件

target2:testcomplile,编译test文件

target3:make-jar,生成jar文件

target4:runtests,执行junit测试

(2)辅助target

target5:JUNIT,执行Junit测试需要此target支持

target6:apidocs,生成javaDoc

target7:rmi-compile,编译RMI相关文件(工程中涉及到了RMI通信内容)。

特别说明:test目录下的测试文件与src的source文件是一一对应的,包结构完全一致。

主要目录结构

myproject
├─bin
├─config
├─image
├─lib
├─log
├─src
│ └─AAA
│ └─BBB
│ └─CCC
└─test
└─AAA
└─BBB
└─CCC

----------------------------------------file start-------------------------------------------

<?xml version="1.0" encoding="Shift_JIS"?>

<!-- project tag
name :工程名字
default:默认执行的target
basedir:ant执行的根目录-->
<project name="myproject" default="runtests" basedir=".">
<!-- source路径 -->
<property name="src.dir" value="src" />

<!-- 编译后class路径 -->
<property name="build.dir" value="classes" />

<!-- JavaDoc路径 -->
<property name="build.apidocs" value="${build.dir}/doc" />

<!-- 测试source路径
test.dir : JUnit执行路径
-->
<property name="testSrc.dir" value="test" />

<!-- test报告路径 -->
<property name="reports.dir" value="./doc/report" />

<!-- test结果统计路径 -->
<property name="correctreports.dir" value="${reports.dir}/html" />

<!-- target tag
name :target名字
depends :依赖target,先执行被依赖的target.
description:target描述
-->
<target name="JUNIT">
<available property="junit.present" classname="junit.framework.TestCase" />
</target>

<target name="compile" depends="JUNIT">
<mkdir dir="${build.dir}"/>
<depend srcdir="${src.dir}" destdir="${build.classes}"/>
<javac srcdir="${src.dir}" destdir="${build.classes}">
<classpath>
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
</classpath>
<include name="**/*.java"/>
</javac>
</target>


<target name="testcompile" depends="compile">
<depend srcdir="${testSrc.dir}" destdir="${build.classes}"/>

<!-- test class文件与正式class文件,输出到同一目录下

也就是说正式source和测试source的原文件(java文件)不同目录,但编译后的class文件同目录。

-->
<javac srcdir="${testSrc.dir}" destdir="${build.classes}" fork="true" memoryMaximumSize="512m">
<compilerarg value="-Xlint:unchecked"/>
<classpath>
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
</classpath>
<include name="**/*.java"/>
</javac>
</target>


<target name="rmi-compile" depends="compile">
<rmic base="${build.classes}" verify="true">
<classpath>
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
</classpath>
<include name="**/*.class"/>
<exclude name="**/test/*.class"/>
</rmic>
</target>

<target name="runtests" depends="testcompile">
<delete>
<fileset dir="${reports.dir}" includes="**/*" />
</delete>
<mkdir dir="${reports.dir}"/>

<junit printsummary="on" failureProperty="fail">
<classpath>
<pathelement location="lib/***.jar" />
<pathelement location="lib/***.jar" />
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
</classpath>

<formatter type="xml"/>

<batchtest fork="yes" todir="${reports.dir}">
<fileset dir="${src.dir}">
<!-- 只执行test CLASS -->
<include name="${test.dir}**/*Test.java" />
</fileset>
</batchtest>
</junit>

<junitreport todir="${reports.dir}">
<fileset dir="${reports.dir}">
<include name="TEST-*.xml"/>
</fileset>

<report format="frames" todir="${correctreports.dir}"/>
</junitreport>
</target>

<!-- JavaDoc生成 -->
<target name="apidocs" depends="compile" description="JavaDoc生成">
<javadoc sourcepath="${src.dir}" destdir="${build.apidocs}"
packagenames="AAA.BBB.CCC.*"
author="true"
version="true"
notree="true"
nonavbar="true"
noindex="true"
windowtitle="MyProject API"
doctitle="Regulation"
public="true"
/>
</target>

<!-- Jar生成 -->
<target name="make-jar" depends="rmi-compile" description="Jar生成">
<delete file="myproject.jar"/>
<jar jarfile="myproject.jar" manifest="MANIFEST.MF">
<fileset dir="classes">

<!--除去test文件-->
<exclude name="**/test/"/>
</fileset>
</jar>
</target>
</project>

--------------------------------------file end----------------------------------------------

3.执行build.xml

将build.xml放到myproject工程的根目录下。

控制台切换到myproject工程的根目录“C:myproject”:

(1)编译正式source

C:myproject>ant compile

(2)编译测试文件

C:myproject>ant testcompile

(3)生成jar文件,并且不包含测试文件。

C:myproject>ant make-jar

(4)通过ant执行Junit测试,生成测试报告。

C:myproject>ant runtest

原文地址:https://www.cnblogs.com/mickeygirl/p/3267729.html