【问题标题】:Python Coverage - not covering function contents, just definitionPython Coverage - 不覆盖函数内容,只是定义
【发布时间】:2018-09-29 11:39:51
【问题描述】:

我正在使用coverage.py 来测试我的代码覆盖率。但是,当我调用

时,我的测试正在通过
coverage run -- [script].py -m [test_script].py

并生成一个报告它表明

<line hits="1" number="5"/>
<line hits="0" number="6"/>
<line hits="0" number="7"/>
<line hits="0" number="8"/>

其中第5、6、7、8行如下:

def __init__(self, data):
        self.left = None
        self.right = None
        self.data = data

再举个例子:

我的测试代码:

def test_arb():
assert tree.inc(3) == 4

功能

def inc(x):
    return x+1

报告上的结果

<line hits="1" number="48"/>
<line hits="0" number="49"/>

我花了几天时间研究这个问题,但似乎找不到一个简单的答案。有人能帮忙吗?这可能是一个明显的解决方法,但我是 Python 和测试的初学者。

【问题讨论】:

  • 你能展示你的完整测试,你是如何运行它的,以及完整的输出吗?似乎您的函数根本没有被调用。
  • 完整的测试可以在这里找到:github.com/sineadmcaleer/cs3012-1/blob/master/test_tree.py 我正在使用以下语句运行:coverage run -- tree.py -m test_tree.py 输出是:Name Stmts Miss Cover - ---------------------------------------- tree.py 28 22 21%
  • 您收到的输出是正确的 - 您正在运行的行根本不执行任何测试。您应该注意到,因为没有显示测试输出。实际上,您只运行tree.py,它只导入您的类和函数(这反映在覆盖率报告中)。您必须调用 pytest 才能运行测试。示例:coverage run -m pytest test_tree.py 应该会给你一个更好的覆盖结果。
  • 然而,pytest 有一个很好的覆盖收集插件,它在后台使用coverage,所以我建议你改用它。使用pip install pytest-cov 安装,使用pytest test_tree.py --cov=. 运行以收集当前目录中模块的覆盖率。它还将立即将覆盖报告表打印到终端。还支持各种报告格式,例如pytest test_tree.py --cov=. --cov-report=xml将报告写入coverage.xml而无需您自己生成等。

标签: python testing code-coverage pytest coverage.py


【解决方案1】:

根据您的coverage 命令, 如果使用 unittest 模块,请确保您的 [test_script].py 具有

if __name__ == 'main':
    unittest.main()

(或 pytest 中的替代品)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2017-06-29
    • 2012-10-06
    相关资源
    最近更新 更多