【问题标题】:pytest.mark.parameterize not "finding" fixturespytest.mark.parameterize 不是“寻找”固定装置
【发布时间】:2015-05-10 16:19:44
【问题描述】:

我正在为一个小型库编写测试,在听到很多关于它的好消息后,我决定使用 py.test。

但是,pytest.mark.parameterize 给了我一些问题。起初,我想也许我只是错配了一些括号,然后它就开始在别处寻找固定装置了。所以我决定从给定的参数化示例开始:

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

但这给出了同样的错误:

未找到夹具“输入”

可用的固定装置:capfd、pytestconfig、recwarn、capsys、tmpdir、monkeypatch

使用 'py.test --fixtures [testpath]' 获取帮助。

我去谷歌搜索,但我找不到任何适用的答案。关于如何解决这个问题的任何想法?

编辑:我想知道哪些 Python/py.test 版本会有所帮助。

Python 3.4.0 和 py.test 2.6.4

【问题讨论】:

  • 您使用的是哪个 python 和 py.test 版本?你的代码对我有用。
  • 我想这会有所帮助。 Python 3.4 和 py.test 2.6.4,我会将其编辑到问题中。
  • 和我一模一样(嗯,python 3.4.2)。您是否尝试过重新安装 py.test,因为设置中可能有一些奇怪的东西?单独运行该代码会显示错误,还是需要任何其他代码/环境变量/配置文件?
  • 我尝试重新安装,但问题仍然存在。 :/ 不需要额外的配置或设置。我使用 virtualenv/virtualenvwrapper 单独运行它。我在 py.test 的错误跟踪器中提出了一个问题,以查看维护人员是否可以提供一些启示。
  • @matsjoyce 原来我不是一个很好的拼写者,它是parametrize 而不是parameterize。我将代码复制粘贴到 SO 表单中,但在我的脚本中手动编写,这解释了为什么它为你运行而不是为我运行。

标签: python pytest


【解决方案1】:

我刚刚逐字尝试了您的示例,它在 pytest 2.6.4 中运行良好。也许你拼错了parametrize?您在标题中拼错了,这是一个常见错误,如 this issue 所示。

【讨论】:

  • 这就是问题所在。我希望这是第一次一个小小的疏忽让我困惑了几个小时,但遗憾的是事实并非如此。谢谢!
  • 是的,这是常见的错误。
【解决方案2】:

这不是同一个原因,但这是 google 上“找不到 pytest parametrize fixture”的第一个结果,这是我的自然 google 与 OP 相同的错误:

找不到 E 夹具'blah'

在我的情况下,这是由于一个愚蠢的错字(我太久没有发现!),缺少装饰器中的 @:

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

【讨论】:

  • 我不知道为什么有人选择标记你的答案,但是这个 25 年的 Python 用户感谢你费心报告我所犯的错误!
猜你喜欢
  • 2019-06-27
  • 1970-01-01
  • 2012-10-07
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多