《C++代码整洁之道:C++17 可持续软件开发模式实践》 —2.5.9 如何处理数据库的访问

举报
华章计算机 发表于 2020/02/09 14:02:00 2020/02/09
【摘要】 本节书摘来自华章计算机《C++代码整洁之道:C++17 可持续软件开发模式实践》 一书中第2章,第2.5.9节,作者是[德]斯蒂芬·罗斯(Stephan Roth),连少华 郭发阳 陈涛 译。

2.5.9 如何处理数据库的访问

目前,许多软件系统都包含(依赖)数据库系统,将大量的对象和数据长期存储到数据库中,从而可以方便地从数据库查询这些对象和数据,当系统被关闭以后,这些对象和数据也不会丢失。

一个很重要的问题是:在单元测试期间,我们应该如何处理数据库的访问?

我对这个问题的第一个也是最重要的建议是:能不使用数据库进行单元测试,就不使用数据库进行单元测试。

—Gerard Meszaros, xUnit Patterns

在单元测试过程中,数据库可能会引起各种各样的问题。例如,如果许多单元测试使用同一个数据库,那么,这个数据库就会趋向于一个大的集中式的存储系统,这些单元测试必须为不同的目的而共享这个数据库。而这种共享,可能会对本章前面讨论过的单元测试的独立性产生不利的影响,可能很难保证每个单元测试所需的前提条件。一个单元测试的执行,可以通过共享的数据库对其他的单元测试产生不好的影响。

另一个问题是,数据库的存储速度是缓慢的。访问数据库的速度比访问计算机内存的速度要慢得多。与数据库交互的单元测试往往比完全不依赖于数据库的单元测试慢得多。假设你有几百个单元测试,每个单元测试需要额外的平均500毫秒的时间,这很有可能是由于查询数据库导致的。总之,访问数据库的单元测试比没有访问数据库的单元测试要多花费几分钟的时间。

我的建议是模拟数据库(参见本章后面5.2.12节“测试替身”),只在内存中执行所有的单元测试。不要担心,如果系统中存在数据库的使用,那么,在系统集成和系统测试级别会测试数据库


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。