JUnit学习笔记20---对数据库应用程序进行单元测试4
2013-04-16 11:23
519 查看
5.用Ant运行Cactus测试
一步步的建立Ant文件
(图片备用链接)
建立数据库结构框图
建立web应用程序的war
编译Cactus测试
运行Cactus测试
1.建立数据库结构框图
Ant的SQL任务使得这步变得很简单,因为它可以执行任意的SQL命令,该对象从data.xml文件中读出sql,并依托由${database}属性定义的Hypersonic SQL数据库执行它。
为了建立起数据库,还要在build.properties中定义两个Ant的属性:
创建web应用程序的war
这是一个web应用程序,所以你需要建立一个war来配置应用程序的target。你不需要在war中包含任何与Cactus相关的东西,因为你将使用Ant/Cactus的集成工具来使用这些war。
要创建该war,首先要编译两个源文件。因此创建两个target:compile和war
为了将他们建立起来,还需要在build.properties中建立三个Ant属性:
编译Cactus测试
在你运行Cactus测试之前,需要添加一个如下所示的target以编译这些测试:
你需要为DbUnit和Cactus添加一些jar来编译类路径。在build.properties文件中写入:
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放到测试执行路径中去。
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自动运行。这就为持续集成铺平了道路。
一步步的建立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.1 database = ${cactus.home.jboss3x}/server/default/data/hypersonic/default hsqldb.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.jar collections.jar = ${lib.dir}/commons-collections/jars/commons-collections-2.1.jar servlet.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学习笔记17---对数据库应用程序进行单元测试1
- JUnit学习笔记19---对数据库应用程序进行单元测试3
- JUnit学习笔记18---对数据库应用程序进行单元测试2
- JUnit学习笔记18---对数据库应用程序进行单元测试2
- android菜鸟学习笔记20----Android数据存储(四))Android数据库操作
- JUnit学习笔记13---对servlet和filter进行单元测试2
- ArcGIS API for JavaScript 4.2学习笔记[20] 使用缓冲区结合Query对象进行地震点查询【重温异步操作思想】
- JUnit学习笔记7---mock objects进行孤立测试1
- PHP学习笔记(七):前台用户登陆、后台匹配数据库进行校验
- java学习笔记——使用JDBC,对数据库进行增删改查(方案一)【推荐】
- PHP学习笔记【23】--PHP数据库编程 mysqli扩展库,进行预处理数据库编程
- JUnit学习笔记6---用stub进行粗粒度测试
- JUnit学习笔记13---对servlet和filter进行单元测试2
- JUnit学习笔记10---mock object进行孤立测试4
- PHP学习笔记【23】--PHP数据库编程 mysqli扩展库,进行预处理数据库编程
- JUnit学习笔记8---mock object进行独立测试2
- JUnit学习笔记14---对JSP和taglib进行单元测试1
- JUnit学习笔记16---用JSP和taglib进行单元测试3
- JUnit学习笔记10---mock object进行孤立测试4