【发布时间】:2018-06-07 21:23:14
【问题描述】:
使用 pytest,我可以像这样定义一个夹具:
@pytest.fixture
def foo():
return "blah"
并在这样的测试中使用它:
def test_blah(foo):
assert foo == "blah"
这一切都很好。但我想要做的是定义一个“扩展”以向测试函数提供 multiple 参数的单个夹具函数。像这样的:
@pytest.multifixture("foo,bar")
def foobar():
return "blah", "whatever"
def test_stuff(foo, bar):
assert foo == "blah" and bar == "whatever"
我想将两个对象 foo 和 bar 一起定义(而不是单独的装置),因为它们以某种方式相关。我有时可能还想定义一个依赖于另一个夹具的夹具,但让第二个夹具合并第一个夹具的结果并将其与自己的加法一起返回:
@pytest.fixture
def foo():
return "blah"
@pytest.multifixture("foo,bar")
def foobar():
f = foo()
return f, some_info_related_to(f)
这个例子可能看起来很傻,但在某些情况下foo 类似于一个请求对象,而bar 对象需要链接到同一个请求对象。 (也就是说,我不能将foo 和bar 定义为独立的fixture,因为我需要两者都来自一个请求。)
本质上,我想做的是将夹具函数的名称与测试函数参数的名称解耦,这样我就可以定义一个由特定 set 触发的夹具 em> 测试函数签名中的参数名称,而不仅仅是名称与夹具函数名称相同的单个参数。
当然,我总是可以只返回一个元组作为夹具的结果,然后自己在测试函数中解压它。但是鉴于 pytest 提供了各种神奇的技巧来自动将名称与参数匹配,看起来它也可以神奇地处理这个问题并不是不可想象的。 pytest 可以做到这一点吗?
【问题讨论】:
-
我尝试的解决方案失败了:stackoverflow.com/questions/49808989/…
标签: python unit-testing pytest fixtures