JUnit学习笔记20---对数据库应用程序进行单元测试4
来源:互联网 发布:潮阳 电商美工培训 编辑:程序博客网 时间:2024/06/16 03:46
5.用Ant运行Cactus测试
一步步的建立Ant文件
(图片备用链接)
- 建立数据库结构框图
- 建立web应用程序的war
- 编译Cactus测试
- 运行Cactus测试
1.建立数据库结构框图
Ant的SQL任务使得这步变得很简单,因为它可以执行任意的SQL命令,该对象从data.xml文件中读出sql,并依托由${database}属性定义的Hypersonic SQL数据库执行它。
<?xml version="1.0"?><project name="Database" default="test" basedir="."> <property file="build.properties"/> <property name="conf.dir" location="conf"/> <target name="compile"> <mkdir dir="target/classes"/> <javac destdir="target/classes" srcdir="src/java"> <classpath> <pathelement location="${beanutils.jar}"/> <pathelement location="${servlet.jar}"/> </classpath> </javac> </target> <target name="createdb"> <sql driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:${database}" userid="sa" password=""> <fileset dir="${conf.dir}"> <include name="data.sql" /> </fileset> <classpath> <pathelement location="${hsqldb.jar}"/> </classpath> </sql> </target>
为了建立起数据库,还要在build.properties中定义两个Ant的属性:
cactus.home.jboss3x = C:/Apps/jboss-3.2.1database = ${cactus.home.jboss3x}/server/default/data/hypersonic/defaulthsqldb.jar = ${cactus.home.jboss3x}/server/default/lib/hsqldb.jar
创建web应用程序的war
这是一个web应用程序,所以你需要建立一个war来配置应用程序的target。你不需要在war中包含任何与Cactus相关的东西,因为你将使用Ant/Cactus的集成工具来使用这些war。
要创建该war,首先要编译两个源文件。因此创建两个target:compile和war
<target name="compile"> <mkdir dir="target/classes"/> <javac destdir="target/classes" srcdir="src/java"> <classpath> <pathelement location="${beanutils.jar}"/> <pathelement location="${servlet.jar}"/> </classpath> </javac> </target> <target name="war" depends="compile"> <war destfile="target/database.war" webxml="src/webapp/WEB-INF/web.xml"> <classes dir="target/classes"/> <lib file="${beanutils.jar}"/> <lib file="${collections.jar}"/> </war> </target>
为了将他们建立起来,还需要在build.properties中建立三个Ant属性:
lib.dir = ../repository
beanutils.jar = ${lib.dir}/commons-beanutils/jars/commons-beanutils-1.6.1.jarcollections.jar = ${lib.dir}/commons-collections/jars/commons-collections-2.1.jarservlet.jar = ${lib.dir}/servletapi/jars/servletapi-2.3.jar
编译Cactus测试
在你运行Cactus测试之前,需要添加一个如下所示的target以编译这些测试:
<target name="compile.cactustest"> <mkdir dir="target/cactus-test-classes"/> <javac destdir="target/cactus-test-classes" srcdir="src/test-cactus"> <classpath> <pathelement location="target/classes"/> <pathelement location="${beanutils.jar}"/> <pathelement location="${dbunit.jar}"/> <pathelement location="${cactus.jar}"/> </classpath> </javac> <copy todir="target/cactus-test-classes"> <fileset dir="src/test-cactus"> <include name="**/*.xml"/> </fileset> </copy> </target>
- 你需要为DbUnit和Cactus添加一些jar来编译类路径。在build.properties文件中写入:
cactus.jar = ${lib.dir}/cactus/jars/cactus-13-1.5-beta1.jar dbunit.jar = ${lib.dir}/dbunit/jars/dbunit-1.5.5.jar
2. 以java资源的形式加载data.xml
运行Cactus测试
- 你已经几乎可以用来自Cactus/Ant集成模块的Ant任务cactus来执行测试了,但是,你还需要一个被Cactus化的war传递给cactus任务。Ant任务的cactifywar可以为你处理这件事情。你需要在编译文件中定义它们
- 添加所有的Cactus jar到taskdef路径中去,该类路径将被cactifywar和cactus使用。Cactifywar任务将Cactus jar放到cactified war中去,cactus任务将Cactus jar放到测试执行路径中去。
<target name="test" depends="war,compile.cactustest"> <taskdef resource="cactus.tasks"> <classpath> <pathelement location="${cactus.ant.jar}"/> <pathelement location="${cactus.jar}"/> <pathelement location="${logging.jar}"/> <pathelement location="${aspectjrt.jar}"/> <pathelement location="${httpclient.jar}"/> </classpath> </taskdef> <cactifywar srcfile="target/database.war" destfile="target/test.war"> <classes dir="target/cactus-test-classes"/> <lib file="${dbunit.jar}"/> <lib file="${exml.jar}"/> </cactifywar> <cactus warfile="target/test.war" fork="yes" printsummary="yes" haltonerror="true" haltonfailure="true"> <containerset> <jboss3x dir="${cactus.home.jboss3x}" output="target/jbossresult.txt"/> </containerset> <formatter type="brief" usefile="false"/> <batchtest> <fileset dir="src/test-cactus"> <include name="**/TestJdbcDataAccessManagerIC.java"/> </fileset> </batchtest> <classpath> <pathelement location="target/classes"/> <pathelement location="target/cactus-test-classes"/> <pathelement location="${dbunit.jar}"/> </classpath> </cactus> </target>
Cactus任务是junit Ant任务的扩展。因此所有的junit任务可用的属性cactus任务也可以直接使用。你需要告诉cactus任务你想要什么样的容器来运行测试,这个例子中,我们使用了JBoss3.2.1,因此为jboss3x元素。Cactus任务支持许多其它容器。
这个例子仅需众多Cactus/Ant集成测试模块可用功能中的一部分。如果想了解更多内容,请访问(http://jakarta.apache.org/cactus)
执行Cacus测试
……
6.改进构建性能
本例中只有一个单元测试,进行的时间是很短暂的,但是当我们的测试非常多的时间的时候,那么,这种测试的时间是非常可观的,为了提高效率,我们可以从下面的几点着手:
- 分解出只读数据 数据库中有些数据是不会在程序运行过程中修改的,创建一个类,在TestSetup类中预置它们
- 按功能将测试分组 将测试组合起来可以共享资源,减少开销
- 使用驻留内存 例如Hypersonic SQL有一对运行着的测试非常理想的驻留内存模块
7.数据库整体单元测试策略
到此,我们已经知道了如何在数据库内进行测试了,选择一种方法:
- mock objects/功能测试 为业务逻辑部分编写一个mock风格的单元测试,同样为数据库访问层写一个mock风格的单元测试。
- cautus 集成/功能单元测试
- 应用持续的集成 在项目开始的时候就使用Ant工具
8.小结
在本章中,我们介绍了3种简单的单元测试形式,他们可以测试调用实际数据库的访问代码:隔离开数据库测试商业代码的业务逻辑单元测试(business logic unit test),隔离开数据库测试数据库访问代码的单元测试(data access unit test),以及集成单元测试(integration unit tests)。
业务逻辑测试及数据访问单元测试作为普通的JUnit测试在mock objects的帮助下很容易运行。
对于集成单元测试,我们学习了强大的Cactus/DbUnit组合。这不仅从容器内部进行测试,而且从Ant自动运行。这就为持续集成铺平了道路。
- JUnit学习笔记20---对数据库应用程序进行单元测试4
- JUnit学习笔记20---对数据库应用程序进行单元测试4
- JUnit学习笔记17---对数据库应用程序进行单元测试1
- JUnit学习笔记18---对数据库应用程序进行单元测试2
- JUnit学习笔记19---对数据库应用程序进行单元测试3
- JUnit学习笔记18---对数据库应用程序进行单元测试2
- JUnit学习笔记17---对数据库应用程序进行单元测试1
- JUnit学习笔记13---对servlet和filter进行单元测试2
- JUnit学习笔记14---对JSP和taglib进行单元测试1
- JUnit学习笔记15---对JSP和taglib进行单元测试2
- JUnit学习笔记15---对JSP和taglib进行单元测试2
- JUnit学习笔记14---对JSP和taglib进行单元测试1
- JUnit学习笔记13---对servlet和filter进行单元测试2
- Junit 对应用进行单元测试
- junit对spring进行单元测试
- 学习使用junit进行单元测试,
- Android学习笔记---对应用进行单元测试
- 使用 JUnit 对规则进行单元测试
- Android开发之旅:活动与任务
- sizeof与数组名
- Struts1.x+spring+ibatis分页--自定义tag标签
- Java的JAR包, EAR包 ,WAR包 都是干什么的,有什么区别
- ubuntu 12.04 install gnuradio
- JUnit学习笔记20---对数据库应用程序进行单元测试4
- ImageIO读jpg的时候出现exception:bandOffsets.length is wrong
- 小谈C++的函数重载,成员函数覆盖与成员函数隐藏
- SVN常用命令
- JUnit学习笔记18---对数据库应用程序进行单元测试2
- Hibernate映射类型
- 简单选择排序的改进——二元选择排序
- 简单的列表解析
- Rank (MDX)