我有一个类,我想使用不同的输入参数集来实例化,将结果对象上的属性与传入的值进行比较。
我正在使用@ pytest.fixture上的间接标志作为发送到类构造函数的参数。我正在尝试在构造函数中解压缩kwarg。不成功。这是错误:
TypeError:**之后的类型对象参数必须是映射,而不是SubRequest
代码:
import pytest
class MyClass:
def __init__(self, a):
self.a = a
@pytest.fixture
def my_object(request):
yield MyClass(**request)
# first element = arguments to MyClass, second element = value to compare test to
TEST_CASES = [({"a":1}, 1)]
@pytest.mark.parametrize("test, expected", TEST_CASES, indirect=["test"])
def test_1(my_object, test, expected):
assert my_object.a == expected
我的目标是将对象参数及其测试值TEST_CASES放在一个结构中以便于检查
答案 0 :(得分:0)
我建议您使用一个可行的例子。问题出在测试代码设计中。参数indirect
应该为True
。如docs中所述,应使用多个夹具进行间接参数化。夹具在他的request.param
属性中具有所有参数。
import pytest
class MyClass:
def __init__(self, a):
self.a = a
@pytest.yield_fixture
def test_case(request):
params, expected = request.param
yield MyClass(**params), expected
# first element = arguments to MyClass, second element = value to compare test to
TEST_CASES = [({"a": 1}, 1)]
@pytest.mark.parametrize("test_case", TEST_CASES, indirect=True)
def test_1(test_case):
my_object, expected = test_case
assert my_object.a == expected