【发布时间】: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