2022年数据库操作的单元测试终版 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年数据库操作的单元测试终版 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库操作的单元测试终版 .pdf(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 数据库单元测试名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 23 页 -1 目录1.测试环境的搭建(DBunit+HSQLDB).11.1.DBunit 的简介.11.1.1.DBunit 简单介绍和原理.11.1.2.DBunit 的三大核心组件.11.1.3.DBunit 的安装使用.21.2.HSQLDB 简介.31.2.2.什么是 HSQLDB.31.2.3.HSQLDB 安装和使用.51.2.4.HSQLDB 使用.71.2.5.HSLDB 的使用注意事项.82.数据库单元测试测试流程介绍.12.1.数据库单元测试的原因.12.2.测试关注点.12.3.测试流程.
2、13.数据库单元测试最佳实践.23.1.数据库单元测试最佳实践.23.1.1.从“易测试的”应用程序体系结构开始。.23.1.2.使用精确的断言。.23.1.3.外化断言数据。.33.1.4.编写全面的测试。.43.1.5.创建稳定、有意义的测试数据集。.53.1.6.创建专用的测试库。.63.1.7.有效地隔离测试。.73.1.8.分割测试套件。.83.1.9.使用适当的框架(如 DbUnit)简化过程。.93.2.DBunit 使用最佳实践.93.2.1.每一个开发人员需要搞一个数据库实例。.93.2.2.使用 XML文件作为DataSet.93.2.3.DBUnit 的最佳实践是尽可能使
3、用最小的数据集。.103.2.4.DatabaseOperation.CLEAN_INSERT 策略.103.2.5.为相互关联的测试场景创建多个种子文件是一个很有效的策略.103.3.自我总结.103.3.1.对各种类型的方法的测试策略:.103.3.2.写一个基TestCase。.103.3.3.测试数据库的有效方法。.103.3.4.seed 文件的设置.103.3.5.一般的测试的步骤.114.数据库单元测试指南.错误!未定义书签。4.1.测试代码的包结构.错误!未定义书签。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 23 页 -2 4.2.对于各种类型方法的测试策略
4、.错误!未定义书签。4.2.1.查询类的方法.错误!未定义书签。4.2.2.更新类的方法.错误!未定义书签。5.参考资料.错误!未定义书签。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 23 页 -1 1.测试环境的搭建(DBunit+HSQLDB)1.1.DBunit 的简介1.1.1.DBunit 简单介绍和原理为依赖于其他外部系统(如数据库或其他接口)的代码编写单元测试是一件很困难的工作。在这种情况下,有效的单元必须隔离测试对象和外部依赖,以便管理测试对象的状态和行为。使用mock object对象,是隔离外部依赖的一个有效方法。如果我们的测试对象是依赖于DAO的代码,m
5、ock object技术很方便。但如果测试对象变成了DAO本身,又如何进行单元测试呢?开源的DbUnit项目,为以上的问题提供了一个相当优雅的解决方案。使用DbUnit,开发人员可以控制测试数据库的状态。进行一个DAO单元测试之前,DbUnit 为数据库准备好初始化数据;而在测试结束时,DbUnit 会把数据库状态恢复到测试前的状态。官网:www.dbunit.orgDBUnit的设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状态;而且又因为 DBUnit 是对JUnit的一种扩展,开发人员可以通过创建测试用例代码
6、,在这些测试用例的生命周期内来对数据库的操作结果进行比较。1.1.2.DBunit 的三大核心组件1.1.2.1.I DatabaseConnection:数据连接dbUnit持有的对数据库的连接。基于jdbc 的,以及基于datasource的都有。1.1.2.2.I DataSet:数据源(5 种)FlatXmlDataSet:每个XML 元素是对应者一个表行。元素的名字就是表的名字。XML的属性就对应表的列名。如果需要指定为null值,只需要省略对应的属性就可以。也就是说,在XML 文件中,第一行最好把所有的值都设置好了。要不然会有麻烦。(在使用过程当中并没有出现这样的情况。)Datab
7、aseDataSet:将整个数据库作为一个DataSet。QueryDataSet:将数据库的查询结果作为一个DataSet。DefaultDataSet:用于编程目的。XlsDataSet:读写 EXCEL文件,根据这个文件的内容来构建DataSet。ReplacementDataSet:Decorator类,可以用一些属性来替换DataSet 中的值。1.1.2.3.DatabaseOperation:数据库的操作代表在每个testcase开始之前以及结束之后,执行的数据库操作。DatabaseOperation.UPDATE:更新数据库。就是利用DataSet中的值去更新数据库,当然是假
8、设原来的数据库中已经存在那些值,要不然会报错的。DatabaseOperation.INSERT:插入数据库。那么需要保证你插入的时候,数据库之间的外健关联关系,因此,表插入的顺序要正确。如果外健关联是程序维护的话,那么就不会有这个问题。MYSQL 不会有这个问题。(HSQLDB 存不存在这个问题)DatabaseOperation.DELETE:删除。只删除那些在Dataset 中的记录。DatabaseOperation.DELETE_ALL:删除在DataSet 中出现的所有的表。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 23 页 -2 DatabaseOperati
9、on.TRUNCATE:截断在DataSet中出现的表。是按照DataSet中表出现的相反顺序进行截断的。DatabaseOperation.REFRESH:把 DataSet中的内容刷新到数据库中。DataSet中在数据库中存在的会被刷新,在数据库中不存在的,会被插入。DatabaseOperation.CLEAN_INSERT:先执行DELETE_ALL,然后执行INSERT。清空,然后重新装入数据库。DatabaseOperation.NONE:什么也不做。TransactionOperation:Operation的 decorator类,在 Transaction中执行这些操作。Id
10、entityInsertOperation:也是decorator类,是用于专门处理MS SQLSERVER中的 ID 自动生成的问题。IDENTITY。1.1.3.DBunit 的安装使用只要从DBunit的官网(http:/ 与DBunit相 关 的jar包(如:dbunit-2.4.6.jar),另 外DBunit还 依 赖http:/www.slf4j.org和 commons-logging.jar,所以也需要下载slf4j的 slf4j-api-1.5.3.jar和 slf4j-jcl-1.5.3.jar。注意,在owk 中并未使用上面的dbunit-XX.jar而使用 owk 自
11、定义的jar owk-dbunit-2.4.6.jar。DBunit 的使用可参见第4 部分中的测试示例。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 23 页 -3 1.2.HSQLDB 简介1.2.1.HSQLDB 简介1.2.2.什么是 HSQLDB HSQLDB 是一款纯Java 的数据库软件,支持ANSI-92 SQL、SQL 99 中的多数操作。HSQLDB 很小巧,包括DB Engine、Jdbc driver、DB管理工具在一起,只有一个约600K 的JAR 包。HSQLDB性能很好,据其官网宣称,jdbc+hsql 快过 jdbc+mysql 20倍。HSQL
12、DB非 常 适 合 嵌 入 式 数 据 库、产 品 演 示 用 数 据 库、调 试 和 单 元 测 试 用 数 据 库。HSQLDB 官网:http:/hsqldb.org/1.2.2.1.HSQLDB数据库包含的文件在介绍这些模式之前我们需要了解一些Hsqldb 所涉及的一些文件。每个Hsqld 数据库包含了 2 到 5 个命名相同但扩展名不同的文件,这些文件位于同一个目录下。例如,名位test的数据库包含了以下几个文件:test.properties test.script test.log test.data test.backup properties文件描述了数据库的基本配置。scr
13、ipt文件记录了表和其它数据库对象的定义。log 文件记录了数据库最近所做的更新。data 文件包含了cached(缓冲)表的数据,而backup 文件是将data 文件压缩备份,它包含了data 文件上次的最终状态数据。所有这些文件都是必不可少的,千万不可擅自删除。但如果你的数据库没有缓冲表(cached table),test.data和 test.backup文件是不会存在。1.2.2.2.HSQLDB的三种运行模式一、Server 模式Server模式提供了最大的可访问性。应用程序(客户端)通过Hsqldb 的 JDBC驱动连接服务器。在服务器模式中,服务器在运行的时候可以被指定为最多
14、10 个数据库。根据客户端和服务器之间通信协议的不同,Server 模式可以分为以下三种:1)、Hsqldb Serve 这种模式是首选的也是最快的。它采用HSQLDB专有的通信协议。启动服务器需要编写批处理命令。Hsqldb提供的所有工具都能以java class归档文件(也就是jar)的标准方式运行。假如hsqldb.jar位于相对于当前路径的./lib下面。我们的命令将这样写:java-cp./lib/hsqldb.jar org.hsqldb.Server-database.0 mydb-dbname.0 demoDB 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 23
15、 页 -4 现在你可能会疑惑,-database.0、dbname.0为什么在后面加0。我们不是在前面说服务模式运行的时候可以指定10 个数据库吗,如有多个数据库,则继续写命令行参数-database.1 aa-dbname.1 aa-database.2 bb-dbname.2 bb.新建文本文件保存上面命令,文件名可以随意,将后缀名改成bat,然后直接执行批处理文件即可。在以后介绍的执行启动工具的命令采用同样方法。上面启动服务器的命令启动了带有一个(默认为一个数据库)数据库的服务器,这个数据库是一个名为mydb.*文件,这些文件就是mydb.Properties、mydb.script、m
16、ydb.log 等文件。其中demoDB 是 mydb的别名,可在连接数据库时使用。2)、Hsqldb Web Server 这种模式只能用在通过HTTP协议访问数据库服务器主机,采用这种模式唯一的原因是客户端或服务器端的防火墙对数据库对网络连接强加了限制。其他情况下,这种模式不推荐被使用。运行web 服务器的时候,只要将刚才命令行中的主类(main class)替换成:org.hsqldb.WebServer.3)、Hsqldb Servlet 这种模式和Web Server 一样都采用HTTP协议,当如Tomcat 或 Resin 等 servlet引擎(或应用服务器)提供数据库的访问时,
17、可以使用这种模式。但是Servlet模式不能脱 离servlet引 擎 独 立 启 动。为 了 提 供 数 据 库 的 连 接,必 须 将HSQLDB.jar中 的hsqlServlet类放置在应用服务器的相应位置。Web Server 和 Servlet模式都只能在客户端通过JDBC驱动来访问。Servlet模式只能启动一个单独的数据库。请注意做为应用程序服务器的数据库引擎通常不使用这种模式。二、In-Process模式In-Process模式又称Standalone模式。这种模式下,数据库引擎作为应用程序的一部分在同一个JVM 中运行。对于一些应用程序来说,这种模式因为数据不用转换和通过网
18、络的传送而使得速度更快一些。其主要的缺点就是默认的不能从应用程序外连接到数据库。所以当应用程序正在运行的时候,你不能使用类似于Database Manager的外部工具来查看数据库的内容。推荐的使用In-Process模式方式是:开发的时候为数据库使用一个HSQLDB 服务器实例,然后在部属的时候转换到In-Process内模式。一个 In-Process模式数据库是从JDBC语句开始启动的,在连接URL中带有指定的数据库文件路径作为JDBC的一部分。例如,假如数据库名称为testdb,它的数据库文件位于与确定的运行应用程序命令相同的目录下,下面的代码可以用来连接数据库:Connection
19、c=DriverManager.getConnection(jdbc:hsqldb:file:testdb,sa,);数据库文件的路径格式在Linux主机和Windows 主机上都被指定采用前斜线(/)。所以相对路径或者是相对于相同分区下相同目录路径的表达方式是一致的。使用名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 23 页 -5 相对路径的时候,这些路径表示的是相对于用于启动JVM的 shell命令的执行路径三、Memry-Only 数据库Memory-Only 数据库不是持久化的而是全部在随机访问的内存中。因为没有任何信息写在磁盘上。这种模式通过mem:协议的方式来指定:
20、Connection c=DriverManager.getConnection(jdbc:hsqldb:mem:dbName,sa,);你也可以在server.properties中指定相同的URL来运行一个Memory-Only(仅处于内存中)服务器实例。注意事项:当一个服务器实例启动或者建立一个in-process数据库连接的时候,如果指定的路径没有数据库存在,那么就会创建一个新的空的数据库。这个特点的副作用就是让那些新用户产生疑惑。在指定连接已存在的数据库路径的时候,如果出现了什么错误的话,就会建立一个指向新数据库的连接。为了解决这个问题,你可以指定一个连接属性ifexists=tru
21、e只允许和已存在的数据库建立连接而避免创建新的数据库,如果数据库不存在的话,getConnection()方法将会抛出异常。1.2.3.HSQLDB 安装和使用1.2.3.1.安装步骤1)下载 hsqldb.jar,地址:http:/ lib下的 hsqldb.jar放在./lib目录下(注意是./lib,而不是其他的,ant 中有相关配置),若要置于其他路径,必须修改相应的ant 任务配置项。到此,最基本的hsqldb安装已经结束了(简单吧_),下面是在 owk 项目使用的 hsqldb的说明。3)在项目的根目录下,构建如下的目录结构(这里同样与ant 任务配置有关,修改需同时修改 ant
22、任务配置项)4)运行 ant 任务 hsqldb.xml中的相应的任务(help,startServer,shutdownServer,broweServer,initScript)具体各种任务的具体作用,可运行help任务来查看,如图所示的帮助:名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 23 页 -6 常规使用数据库的步骤:(1).startServer 启动服务器出现下面的文字说明启动服务器成功了(2).initScript 初始化数据库出现下面的文字说明成功初始化数据库中间部分内容省略注:首次初始化后,第二次使用会出现如下图所示的sql error,对此不需要处理不影
23、响效果(3).broweServer 运行数据库管理器(这里可以进行简单的sql 语句)出现下面所示的窗口就说明成功了:名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 23 页 -7 注:A 菜单栏,一些简单的设置窗口属性和显示内容属性 B 显示数据库拥有的所有表C 在这里可以输入一些的简单的sql 语句D 显示结果和错误信息(4).shutdownServer 关闭数据库(注,只有执行这个命令才能关闭数据库,具体解释可见软件开发人员注意事项03)出现如下的内容,则说明关闭数据库成功5)配置属性(配置文件 WebRoot/webinf/config/owk-authority.p
24、roperties)(1).为了能在项目使用hsqldb,除了必须修改常规的数据库连接参数配置connection.driver,class,connection.url,connection.username,connection.password外还配置另外两个参数:hibernate.jdbc.batch_size,hibernate.dialect(2).具体配置值如下:#使用 HSQLDB的参数修改connection.driver_class=org.hsqldb.jdbcDriverconnection.url=jdbc:hsqldb:hsql:/localhost/OWKcon
25、nection.username=saconnection.password=connection.security=false hibernate.jdbc.batch_size=0hibernate.dialect=org.hibernate.dialect.HSQLDialect 至此,一切皆已结束,你可以安枕无忧的使用hsqlDb。(太方便了,_)1.2.4.HSQLDB 使用名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 23 页 -8 运行 ant 任务启动服务器1.2.5.HSLDB 的使用注意事项为了能够在以后的单元测试及演示使用等场合使用HSQLDB,开发时应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据库操作的单元测试终版 2022 数据库 操作 单元测试
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内