【发布时间】:2013-01-23 04:06:50
【问题描述】:
我知道代码覆盖率是一个指标,但在有关单元测试的文章中经常提到它。但是在设计单元测试时,我正在尝试为我的业务逻辑编写测试并且不太关心覆盖率。那是什么关系呢?
【问题讨论】:
标签: unit-testing code-coverage theory
我知道代码覆盖率是一个指标,但在有关单元测试的文章中经常提到它。但是在设计单元测试时,我正在尝试为我的业务逻辑编写测试并且不太关心覆盖率。那是什么关系呢?
【问题讨论】:
标签: unit-testing code-coverage theory
思路如下:
如果您在运行单元测试时执行的代码涵盖了您测试的类(被测系统,SUT)中的所有代码,那么您显然测试了所有相关代码。
所以,SUT 的高代码覆盖率是一件好事。
但它也可能具有误导性。拥有 100% 的代码覆盖率并不意味着您实际测试了所有业务逻辑。因此,专注于测试所有业务逻辑实际上是更好的方法。
如果您测试了所有业务逻辑,您将获得 100% 的代码覆盖率 - 或者您的业务逻辑中不需要的一些代码。
不过,您可以使用代码覆盖率来检查您是否真的测试了所有业务逻辑。
所以,总结一下:
【讨论】:
从字面上看,“单元测试”测试单个单元,或者换句话说,单个组件。因此,单元测试不一定涵盖业务需求,而是确保组件的每一部分 都按照它的用途进行。代码覆盖率衡量已测试并因此得到验证的代码的百分比。每一段未经测试的代码都可能包含缺陷,因此需要高代码覆盖率结果。
当然,单元测试,或者更确切地说,用于实现单元测试的框架也可以用于一次测试多个组件。这些测试更像是集成测试,尽管级别很低。
代码覆盖率和集成(或业务逻辑测试)之间的关系是,如果您有 100% 的代码覆盖率,您就知道每个组件都在做它应该做的事情。但是,如果您想确保应用程序完成它应该做的事情,那么高代码覆盖率是远远不够的:对于这个额外的集成测试(一次测试多个组件)是需要的。
【讨论】:
带有代码覆盖率的单元测试可能是一个非常强大的工具。
例如。测试方法时,您可以查看是否已命中所有逻辑路径。如果不需要更多测试。如果不可能命中一段代码,你知道你可以删除它而不会产生任何副作用。
【讨论】: