pytest和coverage的组合不起作用。

9

我安装了一个pytest插件,从这里下载:http://pypi.python.org/pypi/pytest-cov。然后我有一个简单的测试代码:

pytest.py:

class TestNumbers:
    def test_int_float(self):
        assert 1 == 1.0

    def test_int_str(self):
        assert 1 == 1

我尝试使用命令 py.test --cov-report term --cov pytest.py 进行测试,但无效。即使我提供了pytest.py的完整绝对路径,仍然没有数据进行收集。然而,如果我使用py.test pytest.py,它肯定可以正常测试。

我对这个问题感到非常困惑,感谢您的帮助。


1
请使用文件名前缀“test_”,但无论如何都不要使用“pytest.py”,因为它会遮盖实际的“pytest”模块。 - hpk42
1个回答

17

尝试:

py.test --cov-report term --cov=. test.py

--cov参数需要一个指示哪些路径需要覆盖的参数。在你的例子中,--cov将消耗test.py,但是对于py.test来说没有剩余的关于要测试哪些文件的参数。

更新: 如@hpk42所指出的那样,您需要为您的示例命名为除pytest.py之外的其他名称。当我在本地运行时,我将其命名为test.py


如果“pytest.py”是用户模块,它将无法工作。这会掩盖实际的py.test(因为您要使用“import pytest”导入helpers/things)。 - hpk42
哎呀...我的例子应该是test.py。你当然是对的。不过,py.test至少会输出一个合理的错误信息来告诉你这个问题。 - John Szakmeister
非常感谢。问题在于使用了“pytest.py”作为文件名。更改后,所有测试都通过了。你的答案是正确的。命令应该是“py.test --cov-report term --cov=. test.py”。 - user1067671
如果有人想知道如何从doctest获取覆盖率数字(我的一个同事认为不支持),可以使用以下命令:$ py.test --doctest-modules . --cov-report term --cov=. 或者 $ py.test --doctest-modules mymodule --cov-report term --cov=mymodule - floer32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接