- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第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的间接调用。 还有另外的两种解决方法:获得访问源码的权限,或者是在不同的层
您可能关注的文档
- 社会学第四章0325.ppt
- 社会满意度视域中行政审批制度改革与廉政建设的相关性分析.doc
- 社会单位“四个能力”建设工作.ppt
- 社会消费品零售总额.pptx
- 石龙汇星商业中心招商推介(招商发布会4月18日早上9:00-12:00).ppt
- 社会工程学攻击.pptx
- 矿调工作程序及方法.ppt
- 社保考试范围(双面).doc
- 社会研究方法_全套PPT_.ppt
- 社团部部门制度.doc
- 2025年成都市玩偶生产荧光涂鸦互动玩偶开发可行性研究报告.docx
- 2025年成都市海绵生产用于体育馆室外运动场地透水改造可行性研究报告.docx
- 2025年天津市体操鞋企业团建运动应用报告.docx
- 2025年上海市溶洞极限运动(速降)场地开发可行性研究报告.docx
- 2025年上海市涵洞工程施工技术应用可行性研究报告.docx
- 2025年上海市体育场馆设施扎带安全防护可行性研究报告.docx
- 2025年上海市牦牛育肥产业园区建设可行性研究报告.docx
- 2025年旅拍宠物陪伴拍摄项目可行性研究报告.docx
- 2025年上海市进口食品节庆主题快闪店可行性研究报告.docx
- 2025年上海市洗选厂尾矿综合利用产业化可行性研究报告.docx
文档评论(0)