xiekai-blog
北冥有鱼,其名为鲲。鲲之大,不知其几千里也。化而为鸟,其名为鹏。鹏之背,不知其几千里也。怒而飞,其翼若垂天之云。是鸟也,海运则将徙于南冥。南冥者,天池也。
BlogJava
首页
新随笔
联系
聚合
管理
随笔-94 评论-56 文章-3 trackbacks-0
用Ant构建Java项目(续)
这一篇讲述如何自动运行JUnit测试进行自动化测试。我们将JUnit测试放在test目录。
第一步:编译测试
首先,在build.xml文件里定义一个单独的构建目标,以便编译测试源文件。
<target name="compile-tests" depends="compile">
<javac srcdir="${test.dir}" destdir="${build.test.dir}">
<classpath refid="project.classpath" />
</javac>
</target>
compile-tests目标用<javac>任务在test.dir目录编译测试源文件,并将结果类文件放入build.test.dir目录,用project.classpath路径作为测试代码的类路径。
第二步:运行测试
在build.xml文件里定义构建目标,使所有的JUnit测试自动运行。
<target name="test" depends="compile-tests">
<junit haltonfailure="true">
<classpath refid="project.classpath" />
<formatter type="brief" usefile="false" />
<batchtest>
<fileset dir="${build.test.dir}"
includes="**/*Test.class" />
</batchtest>
<sysproperty key="doc.dir" value="${doc.dir}" />
<sysproperty key="index.dir" value="${index.dir}" />
</junit>
</target>
test目标的depends属性生成与刚定义的compile-tests目标的依存关系。
如果构建成功,意味着所有的东西不仅都编译过,还都通过了测试。
将haltonfailure属性设为true会使构建随着任何测试失败而失败。
这里我们再次用project.classpath定义了运行JUnit测试的类路径。
下面定义了一个输出格式化器,在<formatter> 元素中,使用brief类型来输出每个运行的测试用例的名称及其统计信息,仅当测试失败时才有更详细的信息(plain类型默认比brief类型输出信息多一些;xml类型将测试结果以XML格式输出)。将usefile属性值设为false会将测试结果送往控制台,而不是写入文件。
<batchtest>任务收集从封闭<fileset>元素中返回的所有测试,并自动创建包含了所有测试的测试suite。我们将对所有的测试类用*Test.java命名约定取名,这些文件将编译成*Test.class文件,放在<fileset>的build.test.dir性质指向的目录中。
最后,<sysproperty>元素定义系统性质为一个键值对,这些性质可以在测试代码中访问。这里,测试需要知道从哪里找到文档,以及向哪里放入文档的索引结果,在运行测试时我们将传递这些结果,例如,测试在运行时查看送入的doc.dir系统性质来定位项目目录结构中doc目录的绝对路径。
要运行测试,请执行test目标:
$ ant test
最后,打扫战场
我们可以定义一个删除所有构建输出的Ant目标。
<target name="clean">
<delete dir="${build.dir}" />
</target>
clean目标使用<delete>任务来删除build.dir所指的目录。要删除目录,请运行clean目标:
$ ant clean
冲掉这些构建输出有积极的作用:从头开始生成构建,可以发现可能被累积构建掩盖的错误。
完整的build.xml:
<?
xml version="1.0"
?>
<!--
Excerpted from the book, "Pragmatic Project Automation"
ISBN 0-9745140-3-9
Copyright 2004 The Pragmatic Programmers, LLC. All Rights Reserved.
Visit www.PragmaticProgrammer.com
-->
<
project
name
="dms"
default
="compile"
basedir
="."
>
<
property
name
="build.dir"
location
="build"
/>
<
property
name
="build.prod.dir"
location
="${build.dir}/prod"
/>
<
property
name
="build.test.dir"
location
="${build.dir}/test"
/>
<
property
name
="doc.dir"
location
="doc"
/>
<
property
name
="index.dir"
location
="index"
/>
<
property
name
="src.dir"
location
="src"
/>
<
property
name
="test.dir"
location
="test"
/>
<
property
name
="vendor.lib.dir"
location
="vendor/lib"
/>
<
path
id
="project.classpath"
>
<
pathelement
location
="${build.prod.dir}"
/>
<
pathelement
location
="${build.test.dir}"
/>
<
fileset
dir
="${vendor.lib.dir}"
>
<
include
name
="*.jar"
/>
</
fileset
>
</
path
>
<
target
name
="prepare"
>
<
mkdir
dir
="${build.prod.dir}"
/>
<
mkdir
dir
="${build.test.dir}"
/>
</
target
>
<
target
name
="compile"
depends
="prepare"
>
<
javac
srcdir
="${src.dir}"
destdir
="${build.prod.dir}"
>
<
classpath
refid
="project.classpath"
/>
</
javac
>
</
target
>
<
target
name
="compile-tests"
depends
="compile"
>
<
javac
srcdir
="${test.dir}"
destdir
="${build.test.dir}"
>
<
classpath
refid
="project.classpath"
/>
</
javac
>
</
target
>
<
target
name
="test"
depends
="compile-tests"
>
<
junit
haltonfailure
="true"
>
<
classpath
refid
="project.classpath"
/>
<
formatter
type
="brief"
usefile
="false"
/>
<
batchtest
>
<
fileset
dir
="${build.test.dir}"
includes
="**/*Test.class"
/>
</
batchtest
>
<
sysproperty
key
="doc.dir"
value
="${doc.dir}"
/>
<
sysproperty
key
="index.dir"
value
="${index.dir}"
/>
</
junit
>
</
target
>
<
target
name
="clean"
>
<
delete
dir
="${build.dir}"
/>
</
target
>
</
project
>
下面再举一个实际项目中用到的构建文件的例子:
<?
xml version="1.0"
?>
<
project
name
="JSBook"
default
="compile"
basedir
="."
>
<
property
environment
="env"
/>
<
property
name
="src"
value
="WEB-INF/src"
/>
<
property
name
="classes"
value
="WEB-INF/classes"
/>
<
property
name
="lib"
value
="WEB-INF/lib"
/>
<
property
name
="dist"
value
="dist"
/>
<
path
id
="task.classpath"
>
<
pathelement
location
="${classes}"
/>
<
pathelement
location
="${lib}"
/>
<!--
Tomcat 5.0.16 Servlet 2.4 API
-->
<
pathelement
location
="${lib}/servlet-api.jar"
/>
<!--
Tomcat 5.0.16 JSP 2.0 API
-->
<
pathelement
location
="${lib}/jsp-api.jar"
/>
</
path
>
<
target
name
="init"
>
<
echo
>
Init Complete !
</
echo
>
<
echo
>
ant home = ${ant.home}
</
echo
>
<
echo
>
java home = ${java.home}
</
echo
>
<
echo
>
user home = ${user.home}
</
echo
>
</
target
>
<
target
name
="compile"
depends
="init"
>
<
javac
classpathref
="task.classpath"
srcdir
="${src}"
destdir
="${classes}"
/>
<
echo
level
="verbose"
>
Seen with -verbose
</
echo
>
<
echo
level
="debug"
>
Seen with -debug
</
echo
>
<
echo
>
Compilation Complete !
</
echo
>
</
target
>
<
target
name
="war"
>
<
jar
jarfile
="${dist}/JSPBook.war"
basedir
="."
/>
</
target
>
</
project
>
也许你已经看出来了,这就是〈〈jsp2.0技术手册〉〉里面的build.xml文件啦!
posted on 2006-08-31 11:42
小言身寸
阅读(762)
评论(0)
编辑
收藏
所属分类:
JAVA相关技术
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Java学习从入门到精通的学习方法 (转)
利用MAP进行排序
Weblogic远程重启动命令
取得最小开始日期,JAVA中Set和Iterator的使用一例
WebLogic 如何设置session超时时间
RiA:Rich Internet Application(C/B/S架构)
用Ant构建Java项目(续)
用Ant构建Java项目
TOMCAT创建和发布WEB应用(TOMCAT与Java Web开发技术详解 第二章 阅读笔记)
java中连接Oracle数据源
<%--
共有人在同时阅读此Blog。
--%>
<%--
--%>
<
2006年8月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
. NET 开发(3)
eclipse plugin(3)
Eclipse/MyEclipse(4)
javascript(2)
JAVA相关技术(17)
UML(1)
应用服务器(4)
数据库/SQL语言(11)
日本見聞(2)
日语相关(24)
软件应用(11)
软件测试(2)
雷人语录
電子商務・物流(1)
音乐之声(2)
项目管理(7)
随笔档案
2010年8月 (2)
2010年7月 (1)
2010年6月 (1)
2010年2月 (1)
2009年10月 (1)
2009年7月 (2)
2009年6月 (2)
2008年10月 (1)
2008年8月 (5)
2008年2月 (3)
2008年1月 (1)
2007年12月 (1)
2007年11月 (4)
2007年10月 (2)
2007年7月 (3)
2007年6月 (1)
2007年5月 (1)
2007年2月 (3)
2007年1月 (5)
2006年12月 (4)
2006年10月 (11)
2006年9月 (9)
2006年8月 (12)
2006年7月 (9)
2006年6月 (7)
文章分类
千叶集(2)
日语动词(初中级)(1)
文章档案
2006年12月 (1)
2006年11月 (1)
2006年9月 (1)
相册
夜色下的中科大一角
私の写真館001
私の写真館002
私の写真館003
ebook_download
pl/sql
VB6/VB.net
得益网
Favorite Blog
ErixHao的专栏_模式深度思考
loveyeah
lzgsl的博客_IT日本語
千山鸟飞绝
外语学习资源
岛田九美子
谦卑自牧,宽于待人_weblogic
Friend's Blog
jyuan-blog
一中的同学们
合肥java技术沙龙No.1
musics
200661880202513.mp3
Others
kaisyamail
小小世界
smallworld 20030512 手机铃声下载
小晓日语的G宝盆
我的G宝盘
最新评论
1. re: IBM WAS简介
十大US和登记卡时代科技爱好是大号的金卡和登记卡
--武汉市
2. re: vb.net中dataGridView的单元格的合并
合并的单元格无法选中,如何解决,还有我想在合并的单元个里绘checkbox怎么弄
--ヒツ
3. re: 批量完成EXCEL表格目录超链接[未登录]
谢谢!借用了!虽然不知道公式的含义!
--小莫
4. re: vb.net中dataGridView的单元格的合并
你好,可以寄一份源碼給我嗎?keobo.wang@deltaww.com.cn
--uyfghfv
5. re: vb.net中dataGridView的单元格的合并
可以寄一份vb.net源碼給我嗎?
ms101690@pchome.com.tw
--Surfing
阅读排行榜
1. IBM WAS简介(35818)
2. vb.net中dataGridView的单元格的合并(12642)
3. 电脑出现了以下提示不能启动了"因以下文件的损坏或丢失windosws无法启动WINDOWS/SYSTEN32/CONFIG/SYSTEM..."(12563)
4. IT常用日语 (11961)
5. Eclipse内存溢出的解决之道 -vmargs -Xmx512M(11718)
评论排行榜
1. vb.net中dataGridView的单元格的合并(18)
2. 查找EXCEL的一列中重复的数据(8)
3. IT常用日语 (4)
4. 批量完成EXCEL表格目录超链接(3)
5. 软件高手是这样练成的 —— 座右帖 (感觉太好了,转载过来)(3)