《C++代码整洁之道:C++17 可持续软件开发模式实践》 —2.5.3 单元测试的独立性

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

2.5.3 单元测试的独立性

每个单元测试和其他的单元测试都必须是独立的。如果单元测试之间是以特定的顺序执行的,那么这将是致命的,因为一个单元测试的执行依赖于前一个单元测试的影响,例如,改变了类的状态,改变了上下文环境等。永远不要编写“一个单元测试的输出是另一个单元测试的输入”的单元测试。当离开一个单元测试的时候,不应该改变测试单元的状态,这是后续单元测试执行的先决条件。

主要的问题可能是由全局状态引起的,例如,在单元测试中使用单例或使用了静态的成员。单例不仅增加了单元测试之间的耦合度,还经常会保持一个全局的状态,单元测试之间因为全局状态而变得相互依赖。例如,如果一个全局状态是某个单元测试成功执行的先决条件,当前面的单元测试成功执行并修改了这个全局状态时,那么接下来的单元测试就会执行失败。

尤其是在遗留系统中,经常杂乱无章地使用单例模式,这就引出了一个问题:如何才能摆脱这些杂乱无章的对单例的依赖关系,让我们的代码更易于测试呢?这是在第6章的依赖注入部分讨论的一个重要问题。

处理遗留系统

如果你在所谓的遗留系统中添加单元测试时遇到许多困难,我强烈推荐Michael C写的《Working Effectively with Legacy Code》[Feathers07]。这本书包含了许多策略,用于处理大型的、未经测试的遗留代码,这本书还包括了24种依赖中断技术。当然,这些策略和技术超出了本书的范围。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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