【发布时间】:2021-01-02 14:19:01
【问题描述】:
我有一个pytest.fixture,它有一个位置参数和一个关键字参数。
根据Pass a parameter to a fixture function,可以使用pytest.mark.parametrize 将参数传递给夹具,并将indirect arg 设置为夹具的名称。
请看下面的示例代码。
import pytest
class Foo:
def __init__(self, a: str, b: str):
self.a = a
self.b = b
@pytest.fixture
def a() -> str:
return "alphabet"
@pytest.fixture
def foo_obj(a: str, b: str = "bar") -> Foo:
return Foo(a, b)
@pytest.mark.parametrize("foo_obj", [("applesauce", "baz")], indirect=["foo_obj"])
def test_thing(foo_obj) -> None:
assert foo_obj.a == "applesauce"
assert foo_obj.b == "baz"
此测试当前失败:"applesauce" 和 "baz" 没有被传递到夹具 foo_obj。
我的问题:
- 将 args 传递给夹具
foo_obj时我做错了什么? - 是否可以只在
pytest.mark.parametrize装饰器调用中输入kwargb?- 注意:我对按照这里的建议包装夹具不感兴趣:Can I pass arguments to pytest fixtures?
版本
Python==3.8.5
pytest==6.0.1
【问题讨论】: