网站大量收购独家精品文档,联系QQ:2885784924

第17章junit测试数据库访问重点.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第17章 测试数据库访问 林若钦 本章内容: 用mock objects在隔离数据库的情况下进行单元测试 用Cactus和DbUnit进行集成测试 HSQLDB数据库 DBUnit介绍 DBUnit原理 DbUnit测试基本概念和流程 用 DBUnit 对HSQLDB数据库的测试 管理应用程序示例 1.对数据库进行单元测试的介绍 在前面我们描述了如何对JSP和filter进行单元测试,今天重点学习如何对JDBC组件进行单元测试。 可以编写各种不同类型的包含数据库访问的测试 对业务逻辑的单元测试 对数据库访问的单元测试 数据库集成单元测试 2.隔离开数据库测试业务逻辑 目标是对不包含数据库访问代码的业务逻辑代码进行单元测试。 尽管这种测试本质上说不是数据库测试,但它却是独立的测试那些难以测试的数据库代码的一个很好的策略。 将数据库的访问层和业务逻辑层分开的话,这项工作将变得非常的简单。 让我们看看这意味着什么。AdminServlet的定义如下: 。 2.1、实现数据库访问层的接口 将此接口称为DataAccessManager,并把它的实现称为JdbcDataAccessManager。 import java.util.Collection; public interface DataAccessManager { Collection execute(String sql) throws Exception; } 2.1、实现数据库访问层的接口 已经有了数据访问的接口,你需要重构类AdminServlet以使用该接口并实例化DataAccessManager的JdbcDataAccessManager的实现 重构的结果 2.2 建立一个模拟数据库接口 可以采用多种策略来将一个DataAccessManager的mock 传给AdminServlet: 创建一个参数形式接受DataAccessManager接口的构造函数 创建一个setter方法(setDataAccessManager(DataAccessManager manager)) 派生AdminServlet类,重载executeCommand() 在web.xml文件中定义一个作为AdminServlet初始化参数的类名,使数据访问管理器实现成为你的应用程序的参数 对于上面的方法,最好的方法就是使用setter方法了。所以,再次的将AdminServlet重构如下 : 2.3 模拟数据库接口层 3.隔离开数据库测试持久性代码 前面将业务层和数据访问层进行隔离测试,接下来,就将对数据访问层进行测试。 下面,execute方法很简单。这种简单源于BeanUtils包的使用。BeanUtils提供了一个RowSetDynaClass,它封装了一个ResultSet并将数据库各列映射到bean属性中。然后就可以将各列作为属性用DynaBean API来访问了。 ? 类RowSetDynaClass自动将ResultSet各列拷贝到dyna bean的属性中,这就使得你可以在一结束初始化RowSetDynaClass对象后就关闭与数据库的链接。 JdbcDataAccessManager.java 测试execute方法 为execute方法写单元测试,就是对所有的JDBC的调用提供mock。 首先,将一个mock Connection对象传递给JdbcDataAccessManager类。在这里,创建一个封装类。可以将getConnection方法定义为保护成员,接着创建一个派生自JdbcDataAccessManager 的新类TestableJdbcDataAccessManager。并添加setter方法,这样就绕过了DataSource而获得连接。 代码如下: ? 创建第一个测试 现在有了自己的方式来编写execute方法,所以,开始为它编写第一个测试程序。 对于任何使用mocks的测试来说,困难的地方在于找到那些需要模拟的方法。换句话说,为了提供模拟的响应必须准确的理解API的哪些方法将被调用。 通常,可以尝试犯些错误,接着测试运行,一步步重构。 TestJdbcDataAccessManagerMO1 改进该测试 重构后的进一步测试还是发生了错误,进一步的研究发现,在类RowSetDynaClass实例化时调用了introspect。 这样的错误说明了使用mocks一个潜在的问题:需要对调用mock的类的实现有较深的了解。正如刚刚展示的,可以通过调试发现对mock的间接调用。 还有另外的两种解决方法:获得访问源码的权限,或者是在不同的层

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档