《C++代码整洁之道:C++17 可持续软件开发模式实践》 —2.5.4 一个测试一个断言

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

2.5.4 一个测试一个断言

我知道这是一个有争议的话题,但我会试着解释为什么我认为这很重要,我的建议是限制一个单元测试只使用一个断言。如下所示:

代码2-3 一个检查Money类的不等运算符的单元测试

 image.png

有人可能争辩说我们还可以检查其他比较运算符(例如,Money :: operator==())在该单元测试中是否正常工作,只需添加更多断言就可以轻松实现这一点,如下所示:

代码2-4 问题:在一次单元测试中检查所有比较运算符真的是个好主意吗

 image.png

 image.png

 

我认为这种测试方法的问题是显而易见的:

如果由于某些原因而导致测试失败了,开发人员可能很难快速找到错误原因。最重要的是,前面一个断言的错误掩盖了其他的错误,也就是说,它隐藏了后续的断言,因为测试的执行被中断了。

正如单元测试的命名一节(2.5.2节)中所述,我们应该以精确且富有表现力的方式命名测试。通过多个断言,单元测试确实可以测试很多东西(顺便说一下,这违反了单一职责原则,参见第6章),并且很难为它找到一个好的名字,上面的...testAllComparisonOperators()仍然不够精确。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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