【问题标题】:Ensuring code coverage in unit testing?确保单元测试中的代码覆盖率?
【发布时间】:2011-03-20 07:47:15
【问题描述】:

我注意到,即使我的 Python 代码中有很多 doctest,当我使用此处描述的方法跟踪测试时:

traceit

我发现有些代码行从未执行。我目前筛选 traceit 日志以识别从未运行的代码块,然后尝试提出不同的测试用例来运行这些特定的块。正如您可以想象的那样,这非常耗时,我想知道我们是否以错误的方式处理这个问题,以及你们是否有其他建议或建议来处理这个问题,我相信随着软件变得越来越普遍足够复杂。

【问题讨论】:

    标签: python unit-testing testing code-coverage


    【解决方案1】:

    coverage.py 是一个非常方便的工具。除此之外,它还提供branch coverage

    【讨论】:

    • 如果您提供一个简短的例子来说明如何使用coverage.py,这个答案会更有帮助。
    • @SimplyKnownAsG 链接页面的前面和中间有一个快速入门部分,并包含示例用法。与其复制和粘贴会随着新版本的发布而更改的文档,我发现最好只是链接。
    【解决方案2】:

    管理层是否要求您对测试用例实现 100% 的代码覆盖率保持教条?如果不是,您是否认为接触每一行代码是在代码中查找错误的最有效方法?假设您没有无限的时间和人力资源,您可能应该专注于合理地测试所有重要的代码,重点是开发人员知道难以编写或容易出错的部分。

    虽然代码覆盖率很好,因为您肯定不能说一段代码在被触摸之前已经过测试,但我只是不将触摸一段代码等同于称其为已测试。我并不反对代码覆盖率,但是很容易陷入使用代码覆盖率作为衡量测试何时完成的指标。我认为那将是一个错误。

    【讨论】:

    • 这是一个很好的评论。在我的情况下,我们有科学家而不是程序员来编写 Python 代码。结果,即使科学家们非常聪明,代码的架构也很糟糕。这意味着最终的集成和测试是一场噩梦,我们必须努力工作才能在这个阶段发现严重的问题。我试图让他们为每个人负责的代码编写更好的测试用例,并且我计划使用代码覆盖率作为对他们集成的测试进行限定的一种方式。我可以理解,并非 100% 的代码都需要被触及,但它会有所帮助。
    • 拥有 100% 的覆盖率并不能保证足够的测试,但没有它通常表示没有足够的测试。我们也不要忘记,覆盖模块允许 # pragma: no cover# pragma: no branch 等 cmets。
    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2012-01-18
    • 2023-04-07
    • 1970-01-01
    • 2013-04-16
    • 2014-12-10
    相关资源
    最近更新 更多