代码改变世界

100%测试覆盖率真的有用吗?

  Colin Han  阅读(1154)  评论(5编辑  收藏  举报

背景

最近看到一篇博客,作者是一名ThoughtWorker,文中提到要在他的项目中贯彻100%单元测试覆盖率。我在留言中对100%测试覆盖提出了一些质疑。看到“透明"的回复并且阅读了他的《Why is 100% test coverage easier to achieve》(需FQ)。有些想法,但是Blogbus的评论有字数限制。因此,贴在自己博客里面,希望和dreamhead透明继续讨论

@透明

拜读了你的博文。FQ确实很辛苦。对ThoughtWorks的敬仰又进一层。

但是,对你的观点依然有一些质疑。你认为没有测试覆盖的代码就是不必要的(MUDA)。例如:getter, setter。我想还有一个例外,是健壮性代码(包括必要的断言检查和容错处理)。

我认为这里存在两类问题:1. 保持接口的语义清晰。2.保持模块健壮。

对于接口的语义清晰,我认为对于产品的可维护性会很有帮助。毕竟你写的模块,应该让使用者更易用。既然我们在产品的外部接口上应该精雕细琢。没理由在内部接口上如此惜墨如金啊。

对于模块的健壮性,理论上可以通过添加最够的单元测试后达到你所说的程度(没有单元测试覆盖的代码都是MUDA)。但是,添加单元测试也是成本,很多时候,我们添加这样的容错代码仅仅是两行代码。但是,为了证明这行容错是必要的,却要花费更多的时间和精力。这样真的值得吗?我们新写的这些单元测试是不是MUDA呢?

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示