- 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章junit测试数据库访问解析
第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的间接调用。 还有另外的两种解决方法:获得访问源码的权限,或者是在不同的层
您可能关注的文档
- 光学基础LENS_术语解读篇.ppt
- 文化主题公园项目策划方案(最终版)重点.ppt
- 第16课 血肉筑长城 2解析.ppt
- 光山隧道专项施工方案--最新.doc
- 第16课---血肉筑长城正式版解析.ppt
- 光接入网认证第一篇基础知识.ppt
- 光接收机(二).ppt
- 光接入网认证第二篇接入光缆网规划.pptx
- 新世纪1(第二版)unit 3练习答案重点.ppt
- 第16课-兼容进取的秦汉文化解析.ppt
- 未来五年社区嵌入式养老服务站社区养老产业发展趋势研究报告.docx
- 数字藏品市场技术监管与跨境交易监管技术应用.docx
- 数字藏品市场监管技术下的市场拓展与国际化策略报告.docx
- 数字藏品市场风险预警与监管技术发展分析报告.docx
- 数字藏品确权技术在数字艺术市场的应用案例及启示报告.docx
- 数字藏品行业2025准入资质要求与市场竞争力提升.docx
- 数字藏品行业2025年流动性提升策略与数字货币融合应用.docx
- 数字藏品确权技术在数字版权保护领域的应用探讨报告.docx
- 数据要素市场化配置法律框架下的数据治理能力建设研究(2025年).docx
- 数据要素市场化配置法律框架下的个人信息保护与安全研究报告.docx
文档评论(0)