在尝试使单元测试(使用 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/