在尝试使单元测试(使用 py.test)更通用时,我正在以编程方式生成测试。 - 我有一个函数可以导出参数和在测试结束时保持的不变量。

现在为了保持整洁,我还希望通过 ID 进行测试。查看 pytest 的官方(?)文档,我注意到:

import pytest

from datetime import datetime, timedelta

# ...

@pytest.mark.parametrize("a,b,expected", [
    pytest.param(datetime(2001, 12, 12), datetime(2001, 12, 11),
                 timedelta(1), id='forward'),
    pytest.param(datetime(2001, 12, 11), datetime(2001, 12, 12),
                 timedelta(-1), id='backward'),
])
def test_timedistance_v3(a, b, expected):
    diff = a - b
    assert diff == expected

在示例中显示 different ways to parametrize

上面的方法正是我想要做的(给每组参数提供参数和 ID):我的函数只会输出一个 pytest.param 对象列表。但是,当我运行上述代码段(或来自 pytest.org 的完整代码段)时,出现以下错误(pycharm ide 也突出显示了此语法错误):
E AttributeError: module 'pytest' has no attribute 'param'
文档有错吗?我是否遗漏了一些我没有正确设置环境的东西?

最佳答案

pytest.param 只有 recently been implemented 。要使用它,请确保您使用的是 py.test 版本 3.1.0 或更高版本。

pip install -U "pytest>=3.1.0"

关于python - py.test 参数化 `pytest.param` 未找到?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44258996/

10-15 08:50