传递参数以在Pytest中实例化对象

时间:2018-10-01 09:18:15

标签: pytest

我有一个类,我想使用不同的输入参数集来实例化,将结果对象上的属性与传入的值进行比较。

我正在使用@ 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放在一个结构中以便于检查

1 个答案:

答案 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