- 6
- 0
- 约 35页
- 2017-01-06 发布于贵州
- 举报
DBUNIT使用DBUNIT使用
用DbUnit进行数据库集成测试
1?引言
JUnit家族为Java应用程序的单元测试提供了基本框架,除JUnit之外,还有许多用于专门测试领域的其他工具和框架,本章将介绍用于数据库集成测试的重要工具DbUnit(注1)。
这里将数据库测试描述为“集成测试”,以便与普通“单元测试”相区分,集成测试涉及用户自身代码之外的架构,在数据库集成测试的情况下,额外的架构是真实数据库。
DbUnit通常称为“JUnit扩展”,它提供了TestCase子类,用户可以在自己的测试类中扩展它们,但也可以独立于JUnit以其他方式来使用DbUnit。例如,可以从Ant中调用DbUnit执行某些任务。
本章将说明DbUnit的主要用途,并提供一些典型用法的简单示例,然后还将继续介绍一些其他相关主题。
2?概述
DbUnit的用途
DbUnit有两种主要用途:
准备数据库
DbUnit可以在执行每个测试方法前用已知内容设置表。
验证数据库
DbUnit可以在执行每个测试方法后更方便地验证表的内容。
如果不使用DbUnit,用户还有一些其他选择,不过这些选择有些难以使用。用户可以手工编写JDBC调用来准备和验证数据库,但这通常很难编写,并且需要做大量工作;另外,如果在主应用程序中使用对象-关系映射(ORM),有人会建议通过它来用测试数据填充数据库,以及从数据库中读取数据值进行验证,这相当于用自己的数据访问层来测试自己的数据访问层,它可能不是个好主意。ORM技术涉及相当多的技巧,例如缓存,用户最好不要使用它,以免测试失败。
与此相对照,DbUnit提供了一种相对简单灵活的方式来准备和验证数据库,这种方式独立于被测代码。
设置DbUnit
要使用DbUnit,首先需要从上下载JAR文件,将此JAR文件放在集成开发环境或构建脚本的类路径中,/projects/dbunit/files/dbunit/
在类路径上还需要有数据库的JDBC驱动程序,除此之外,对于基本的DbUnit应用不需要其他依赖项。
用户还应该阅读上的在线文档接下来要决定调用DbUnit的方式。对于大多数测试场景,用户将在自己的测试类中直接或间接调用DbUnit,后面将要看到,也可以从Ant中使用DbUnit来执行某些任务。
用DbUnit运行测试
在用DbUnit进行数据库测试时是在对真实数据库进行测试,用户在运行测试时需要连接到真实数据库。
由于DbUnit和被测代码将在此数据库中插入和修改数据,因此每个开发人员都需要或多或少地拥有对数据库或者至少是其中的模式(schema)的独占访问权限,否则,如果不同的开发人员同时运行测试,他们可能相互冲突。理想的设置是,每个开发人员在自己的计算机上安装数据库软件,现在的计算机功能足够强大,可以用很小的开销来运行几乎任何数据库软件。
用户不必在自己的计算机上拥有完整的生产数据库副本,在数据量相对小的情况下,DbUnit测试工作得最好,它们通常测试系统功能是否正确,而不是测试系统性能。
有人建议将轻量级的嵌入式数据库(如HSQLDB或Apache Derby)用于运行集成测试,这样做的好处是,不需要在自己的计算机上安装特殊数据库软件,另外,使用嵌入式数据库运行测试的速度通常比真实数据库更快,因为可以在内存中运行大多数测试,并且一般开销更小。
然而,对于重要的应用程序,这通常是误导。应用程序往往包含数据库特有的代码或使用数据库特有的功能,除非在运行测试时使用相同的数据库,否则,无法对这些代码和功能进行正确测试。另外,即使是使用ORM层,如Hibernate或JPA,这似乎使代码独立于数据库,但ORM生成的实际SQL代码也可能因数据库不同而异,JDBC驱动程序无疑也不一样。
因此,嵌入式数据库与生产数据库之间存在着显著的功能差异,要使测试尽可能有用和有效,应该努力使数据库环境相同。当然,如果生产系统本身使用嵌入式数据库会更好。
/projects/junit/files/junit/4.8.1/junit-4.8.1.jar/download
IDatabaseConnection
当DatabaseTestCase或IDatabaseTester需要访问实际数据库时,它通过IDatabaseConnection接口进行访问。IDatabaseConnection本质上是一个JDBC Connection的包装程序或适配器,可以通过DatabaseConfig类来定制IDatabaseConnection,DatabaseConfig是一组“名称/值”形式的功能和属性,图14-2给出了这些类。
IDataSet
DbUnit将用于测试的实际数据表示为IDataSet,它是一组表中的数据的抽象表示。? 图14-2:IDatabaseConnection
原创力文档

文档评论(0)