[英]Code coverage in Testing
我最近开始使用TDD,或者可以说对我的项目进行测试,然后发现了一些新东西(对我来说是新东西),称为“代码覆盖率”,它显示了在测试过程中覆盖了多少代码。 据我所知,大多数前辈都说不可能有100%的代码覆盖率或获得100%的代码覆盖率不是很好的做法。 这件事让我感到奇怪,就像这段代码覆盖率是如何工作的,我的意思是说它们覆盖了基于哪些基础的代码? 请说明测试的主要用法。
我在这个问题上附加了代码覆盖率的图像。
实际上,可以实现100%的代码覆盖率,但在某种程度上取决于语言:
关于100%代码覆盖率的有用性:
即使100%的代码覆盖率也并不意味着代码是完美的:
加成:
如果不需要100%的代码覆盖率(因为一切都需要时间,因此要花钱),请首先关注代码中的高风险区域。 首先跳过琐碎的方法,并从复杂/高风险的功能开始。
使用设计模式或代码结构来“帮助”单元测试也很重要:
首先,为了了解代码覆盖率的价值,您必须了解要使用它实现的目标。 代码覆盖率可帮助您确定程序代码的质量,例如它是否健壮或容易出错,是否具有凝聚力或是否具有隐藏的依赖性,是否易于更改等。
具有较高代码覆盖率的代码往往是更好的代码,但不能保证它是好的代码。 这是因为代码质量在很大程度上取决于测试用例的构建方式,例如,如果您正在良好地测试预期的行为,是否输入了错误或破坏性的输入,是否遇到了极端情况或其他特殊情况,等等。编写后,您仍然可以实现较高(或100%)的代码覆盖率,但是您的代码质量较低。
其次,不需要大多数有经验的开发人员告诉您100%的测试覆盖率甚至是一种不好的做法的原因是,为了使代码覆盖率达到100%,您需要投入更多的时间来投资更完整的测试套件。 与编写良好的测试套件相比,编写不良的测试套件通常甚至更容易实现100%的代码覆盖率。
第三,由于您(几乎)永远不会拥有完整的测试套件,仅因为我不认识许多人,他们可以考虑所有可能导致代码出错的情况,因此,您应该紧急地不断修改您的测试套件(不是无限地)而不是解决整个代码覆盖率的虚假下降。
我希望这种关于代码覆盖率的观点能帮助您使其对您更有用。
代码覆盖率很重要,越高越好,因为它表明您的单元测试是彻底的,并且覆盖了该代码区域,从而减少了错误。
您可能不会达到应用程序的100%代码覆盖率,因为MSTest不提供分支,状态覆盖率和测试void方法可能很困难。 您看到的统计信息基于语句/功能的覆盖范围。
好吧,我发现代码覆盖率很重要,但不必100%运行。 如果您获得了大约70%的代码覆盖率,那么它也是可以的;如果您获得了100%的代码覆盖率,那么您的代码是100%正确的也是不必要的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.