python pytest.mark.parameterize不“查找”夹具

bvjxkvbb  于 2023-05-12  发布在  Python
关注(0)|答案(3)|浏览(100)

我正在为一个小型库编写测试,在听到了很多关于py.test的好消息后,我决定使用它。
但是,pytest.mark.parameterize给了我一些问题。一开始,我想也许我只是错配了一些括号,它就去别的地方寻找固定装置了。所以我决定从给定的parameterize示例开始:

@pytest.mark.parametrize("input,expected", [
    ("3+5", 8),
    ("2+4", 6),
    ("6*9", 42),
])
def test_eval(input, expected):
    assert eval(input) == expected

但这给出了相同的错误:
未找到装置“input”
可用夹具:capfd、pytestconfig、recwarn、capsys、tmpdir、monkeypatch
使用'py.test --fixtures [testpath]'来获得帮助。
我去谷歌了一下,但我找不到任何适用的答案。有什么办法吗?
编辑:我想知道哪个Python/py.test版本是有帮助的。
Python 3.4.0和py.test 2.6.4

qzwqbdag

qzwqbdag1#

我只是逐字地尝试了你的例子,它在pytest 2.6.4中运行良好。也许你拼错了parametrize?您在标题中拼错了它,这是一个常见的错误,可以在this issue中看到。

bhmjp9jg

bhmjp9jg2#

这不是同一个原因,但这是谷歌上的第一个结果“pytest parametrize fixture not found”,这是我自然的谷歌与OP相同的错误:
未找到E装置“blah”
在我的情况下,这是由于一个愚蠢的错字(我没有发现太长时间!),缺少装饰器中的@:

pytest.mark.parametrize("blah", [50, 100])
def test_something(blah):
    assert blah > 0
btxsgosb

btxsgosb3#

在我的例子中,我将一个数据类更改为@pytest.mark.parametrize
我忘了@pytest.mark.parametrize是一个装饰器。因此,我没有将装饰器放在函数之上,在装饰器和函数之间,还有其他函数。

@pytest.mark.parametrize("input,expected", [
    ("3+5", 8),
    ("2+4", 6),
    ("6*9", 42),
])

def test_otherfunctions():
    """ a function unrelated to the decorator. """
    pass

#the decorator should be here.
def test_eval(input, expected):
    assert eval(input) == expected

在我的情况下,修复只是重新订购。

def test_otherfunctions():
    """ a function unrelated to the decorator. """
    pass

@pytest.mark.parametrize("input,expected", [
    ("3+5", 8),
    ("2+4", 6),
    ("6*9", 42),
])
def test_eval(input, expected):
    assert eval(input) == expected

相关问题