【问题标题】:How To Determine Which Unit Test Covered a Function or Method如何确定哪个单元测试涵盖了函数或方法
【发布时间】:2015-10-29 20:33:18
【问题描述】:

从 Python 的角度来看,如何确定包含函数或方法的单元测试,或者通常是测试运行程序在套件中的测试命中的任何代码行?考虑到覆盖工具知道被击中的特定代码,这些信息似乎是合理的,但我找不到任何方法来获取这些信息(我使用py.test作为我的测试运行程序coveragepytest-cov 模块)。

我发现的一种方法是将pdb.set_trace 调用放入代码中,但如果我能找到一种不需要修改被测代码的更优雅的方法,那将非常有帮助。

【问题讨论】:

  • 您的测试组织得如何?您可以运行子集来查看哪个调用了特定的行吗?
  • 我一直在用鼻子做测试代码覆盖率。 nosetests --with-coverage --cover-tests
  • 它们组织得很好,但是收集了数千个测试,这是我偶尔会遇到的问题。
  • 我专门用py.testnose 是否具备这种开箱即用的能力?似乎--cover-tests 标志只在报告中包含了测试本身,这与我在这里寻找的不同。
  • 据我所知,这样做的唯一方法是运行更窄的测试子集来确定哪些调用线路 - 通常,覆盖工具设置为告诉你是否调用线路,而不是从哪里调用。

标签: python unit-testing code-coverage pytest


【解决方案1】:

Coverage.py 还没有提供这个功能,但是有一张我们正在讨论想法的公开票:https://github.com/nedbat/coveragepy/issues/170

要阅读此问题的旧历史,请查看the old ticket(在 BitBucket 跟踪器中)

【讨论】:

【解决方案2】:

Smother 是一个覆盖coverage.py 的包装实用程序,它分别测量测试套件中每个测试的代码覆盖率。其主要特点包括:

  • 使用coverage.py 进行快速可靠的覆盖跟踪。
  • 能够查找哪些测试访问了应用程序代码的任意部分。
  • 能够将版本控制差异转换为受影响测试的子集以重新运行。

它支持py.test和nose。

【讨论】:

  • 谢谢!我会检查这些。
  • 我发现安装Smother改变了路径加载行为或者py.test;这不应该影响任何进行正常 python 打包的人,但它确实影响了一些奇怪的供应商直套测试用例。小心
【解决方案3】:

我不知道这段代码在当前的生态系统中是否仍然有效(特别是当前的覆盖版本和nose/nose 2 插件API),但是figleaf 包中的figleaf-sections 插件提供了这个功能。

http://darcs.idyll.org/~t/projects/figleaf/doc/

如果我记得,这是一个很好的概念证明,我肯定很有用,但我认为有一些粗糙的边缘,如果有人接受这个想法并真正让它顺利运行,我会喜欢它!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2019-07-29
    • 2012-12-07
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多