【问题标题】:How is unit testing related to code coverage?单元测试与代码覆盖率有何关系?
【发布时间】:2013-01-23 04:06:50
【问题描述】:

我知道代码覆盖率是一个指标,但在有关单元测试的文章中经常提到它。但是在设计单元测试时,我正在尝试为我的业务逻辑编写测试并且不太关心覆盖率。那是什么关系呢?

【问题讨论】:

    标签: unit-testing code-coverage theory


    【解决方案1】:

    思路如下:

    如果您在运行单元测试时执行的代码涵盖了您测试的类(被测系统,SUT)中的所有代码,那么您显然测试了所有相关代码。
    所以,SUT 的高代码覆盖率是一件好事。

    但它也可能具有误导性。拥有 100% 的代码覆盖率并不意味着您实际测试了所有业务逻辑。因此,专注于测试所有业务逻辑实际上是更好的方法。
    如果您测试了所有业务逻辑,您将获得 100% 的代码覆盖率 - 或者您的业务逻辑中不需要的一些代码。
    不过,您可以使用代码覆盖率来检查您是否真的测试了所有业务逻辑。

    所以,总结一下:

    1. 如果您的 SUT 没有 100% 的代码覆盖率,强烈建议您没有测试完整的业务逻辑
    2. 但是:100% 的代码覆盖率并不能确保您测试了所有逻辑

    【讨论】:

      【解决方案2】:

      从字面上看,“单元测试”测试单个单元,或者换句话说,单个组件。因此,单元测试不一定涵盖业务需求,而是确保组件的每一部分 都按照它的用途进行。代码覆盖率衡量已测试并因此得到验证的代码的百分比。每一段未经测试的代码都可能包含缺陷,因此需要高代码覆盖率结果。

      当然,单元测试,或者更确切地说,用于实现单元测试的框架也可以用于一次测试多个组件。这些测试更像是集成测试,尽管级别很低。

      代码覆盖率和集成(或业务逻辑测试)之间的关系是,如果您有 100% 的代码覆盖率,您就知道每个组件都在做它应该做的事情。但是,如果您想确保应用程序完成它应该做的事情,那么高代码覆盖率是远远不够的:对于这个额外的集成测试(一次测试多个组件)是需要的。

      【讨论】:

        【解决方案3】:

        带有代码覆盖率的单元测试可能是一个非常强大的工具。

        例如。测试方法时,您可以查看是否已命中所有逻辑路径。如果不需要更多测试。如果不可能命中一段代码,你知道你可以删除它而不会产生任何副作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-18
          • 2023-04-07
          • 1970-01-01
          • 2010-10-14
          • 2013-04-16
          • 2014-12-10
          相关资源
          最近更新 更多