» 网友学堂 » JAVA教程 » 实战每晚构建05
实战每晚构建05
作者:ljjk5 发表时间:2007-12-30 11:42 阅读:119次 在百度搜索相关内容

配置ant运行cactus测试
类路径的设置
我们要按照下面的图设置客户端(ant junit任务中)设置classpath,并把右半部分所示的类放到服务器或者webapp的类路径上

客户端cactus.properties
我们知道,cactus需要redirector 代理才能工作,我们除了把这些代理考到相应的webapp的类路径(对于filter和servlet代理)或webapp路径(对于jsp代理)外,我们还需要告诉客户端测试实例到哪里去找这些代理,下面是cactus.properties的内容:
cactus.contextURL = http://localhost:8080/test
其中test为被测试webapp的上下文路径。
cactus.properties也必须放在ant junit任务的classpath中。
服务器(假设为tomcat 4.12)server.xml的设置
我们必须在server.xml中添加cactus redirector代理,使得这些代理能接受客户端测试实例传过来的请求。详细添加办法请参见cactus 文档。
有了正确的junit 类路径的设置,其他的就合正常的junit测试一样。
1.4 clover测试覆盖率计算
clover覆盖率计算工具通过在被测源代码中插入相关指令,在被测源代码被执行时这些指令被执行,用以统计被测源代码被执行的次数,clover利用一个数据库来保存这些数据。Clover还提供了访问这个数据库的工具,并产生html报告文档。
配置ant运行clover分析
clover实现了一些ant任务,下面是ant中定义这些任务的代码
<taskdef resource="clovertasks" >
<classpath>
<pathelement location="${clover.jar}"/>
</classpath>
</taskdef>
下面的代码初始化clover数据库:
<target name="with.clover" depends="init">
<!-- 删除${build.dir}使得重新编译源代码 -->
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
<clover-setup initString="${user.home}/${ANTLOG_FILE_NOEXT}.db" />
</target>
下面的代码产生clover分析,格式为html,结果放在tempcloverreport目录中:
<target name="clover.html" >
<delete dir="tempcloverreport"></delete>
<mkdir dir="tempcloverreport" />
<property name="clover.html" value="ok"<>/property>
<clover-report>
<current outfile="tempcloverreport">
<format type="html"/>
</current>
</clover-report>
</target>
<!-- 下面用一个目标来初始化clover,编译源代码,unittest单元测试和clover分析-->
<target name="clover_report" depends="with.clover, compile,unittest, clover.html">
</target>
这个任务的工作原理为,with.clover在初始化clover数据库后,监视compile;在javac编译java源代码时把记录代码执行的相关指令插入到java源代码中;在单元测试时,这些插入的代码就开始记录被测试代码的执行次数,把结果输出到clover数据库中;clover.html目标根据数据库中的数据生成html文件。
需要注意的几点:
如果是执行cactus类的client/server测试,在服务端的类径中必须包含clover.jar类;
clover 是一个商业工具,但可以得到30天的评估license;
clover 在编译过程中改变了代码的执行路径,在产品发布时必须单独执行compile目标。
Clover 分析结果
下面是Clover 分析结果的图示,读者可以自己看出从这个分析中能得到什么。第一个图是显示一个项目的整体覆盖率情况,第二个图显示了每一个类每行代码的覆盖情况。


1.5 statcvs项目度量工具
statcvs是一个利用cvs reporsitory log生成项目度量的工具,这些度量包括每个作者的代码量,每个目录或文件的代码行数。使用statcvs先要学会使用cvs。
Ant 中使用cvs
Ant 中使用cvs是通过cvs任务来完成的:
<property name="cvsroot" value=":pserver:anonymous@10.1.36.135:/data/src" />
<!--取出源代码,放在tmp目录下,相当于执行cvs co -d ${base.path}/tmp/${location} -->
<cvs cvsRoot="${cvsroot}"
package="${location}"
dest="${base.path}/tmp"
/>
<!-- 执行cvs log ,结果放在tmp.log中-->
<cvs dest="${base.path}/tmp/${location}" command="log" output="${base.path}/tmp/${location}/cvs.log"/>
Ant 中使用statcvs
Statcvs实现了一个ant任务,下面是ant中定义这个任务的代码:
<taskdef name="statcvs" classname="net.sf.statcvs.ant.StatCvsTask">
<classpath>
<pathelement path="${statcvs.jar}"/>
</classpath>
<</taskdef>
下面是使用statcvs任务产生项目度量数据的代码,结果是一些html文件,放在${statcvs.htmldir}目录下:
<statcvs
projectName="${location}"
projectDirectory="${base.path}/tmp/${location}"
cvsLogFile="${base.path}/tmp/${location}/cvs.log"
outputDirectory="${statcvs.htmldir}"
/>
1.6 velocity模版系统
velocity模版系统比起jsp模版来说有比较大的好处:
实现视图和控制代码的完全隔离
在jsp中,我们可以嵌入执行代码,jsp本质是具有格式化代码和控制代码混合能力,虽然大家发明了好多方法、设计模式和最佳实践,可是不能从根本上消除jsp编写员混合格式化代码和控制代码的恶习;而在velocity模版系统中,这种混合不可能存在,你不可能在velocity的.vm文件中通过代码Person p = new Person()生成一个Java对象,这些业务对象只能在控制中生成并放到context中。
安全
jsp文件被编译之后形成了一个类似于servlet的东西,几乎可以在jsp中干任何事,你可以在jsp中写 System.exit(0)来关掉java虚拟机,或利用别的什么漏洞。
这里只说这些好处,关于其他的大家可以到网上去查或自己总结。下面我要介绍一下velocity模版系统工作机制和关于velocity的设置问题。
velocity模版系统工作机制
我们以在servlet环境下的模版系统为例(当然控制还可以由其他代码来实现)。控制可以实例化一些业务对象比如Person 放到context 中(执行context的相关方法),控制在接着装载相关的视图的模版比如PersonInfo.vm,产生Template实例,并让这个实例解释自己生成输出比如html格式流,Template实例在解释模版的时候会根据模版文件中的指令访问context中的业务对象。
所以要使这个模式工作,重要的一点是控制必须和视图就context中的业务对象的名字达成一致,这就是控制和视图的协议。

velocity的设置
velocity运行的第一个任务就是初始化,执行Velocity.init方法。无参数的init方法会采用缺省的属性配置,在velocity.jar 中的org.apache.velocity.runtime.defaults.velocity.properties位置;使用有参数的init方法,参数传递的是一个属性文件或java.util.Properties 对象,参数中定义的属性会覆盖缺省的属性设置,没定义的属性会采用缺省的属性设置。
比较有用的属性设置是读取模版文件时采用的字符集、产生输出流时使用的编码、模版所在的位置和模版装载器:
input.encoding = gbk
output.encoding = gbk
file.resource.loader.path = templates
2、文档书写辅助工具
word 文档书写排版工具
powerpoint,图片组织绘画工具
visio 绘制数据流图,ER图等的工具
rational rose,绘制UML图形的工具
windows 附件中的画图来截取图片
操作系统的全屏打印功能

#Advertisement