Передача аргументов для создания экземпляра объекта в Pytest - PullRequest
0 голосов
/ 01 октября 2018

У меня есть класс, который я хотел бы создать, используя различные наборы входных параметров, сравнивая свойство результирующего объекта с переданным значением.

Я использую косвенный флаг на @ pytest.fixture для аргументов, которые отправляются в конструктор класса.Я пытаюсь распаковать kwargs в конструкторе.Безуспешно.Это ошибка:

TypeError: аргумент типа объекта после ** должен быть отображением, а не SubRequest

Code:

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 голосов
/ 03 октября 2018

Я предлагаю вам рабочий пример.Проблема была в дизайне тестового кода.Параметр indirect должен быть True.Непрямая параметризация с несколькими приборами должна выполняться, как описано в документах .И прибор получил все параметров в своем атрибуте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...