Pytest: использовать макет в приспособлении? - PullRequest
0 голосов
/ 11 апреля 2020

Этот вопрос является продолжением моего предыдущего вопроса, здесь

Я хотел бы определить прибор, который будет выполнять функцию для каждого из его параметров, прежде чем вернуть его мне .

Однако эта функция не может быть запущена без проверки другой функции проверки, поскольку проверка не может быть выполнена без файловой системы.

Вот как это выглядит в настоящее время:

mocked_validation = mock.Mock() mocked_validation.return_value = True

@pytest.fixture(params = GAMELIST_ROOT_VALUES) def basic_parser(request):
    return GameListParser(request.param)

@pytest.fixture @mock.patch('organizer.parser.game_list_parser.GameListParser.validate', mocked_validation) def ready_parser(basic_parser):
    basic_parser.parse()
    return basic_parser

Тем не менее, во время проверки устройство не будет работать при вызове basic_parser.parser ().

Я использую этот макет для тестов, он работает хорошо, поэтому он должен быть связан с тем фактом, что он в приспособлении.

Есть ли в любом случае, чтобы сделать это? Я не буду sh повторять эту строку кода для каждого теста

Это можно проверить с помощью следующего класса:

class GameListParser(object):

    def __init__(self, value):
        self.value = value

    def parse(self):
        if not self.validate():
            raise Exception("Parsing fail")

    def validate(self):
        return False

Редактировать: добавить еще одну попытку, но все равно не удается:

@pytest.fixture
def ready_parser(basic_parser):
    with mock.patch('organizer.parser.game_list_parser.GameListParser.validate') as validation:
        validation.return_value = True
        basic_parser.parse()
        return basic_parser

1 Ответ

0 голосов
/ 11 апреля 2020

Найдено решение с выходом:

@pytest.fixture()
def ready_parser(basic_parser):
    with mock.patch('organizer.parser.game_list_parser.GameListParser.validate') as validation:
            validation.return_value = True
            basic_parser.parse()
            yield basic_parser

Но мне грустно, я не могу использовать определение, которое у меня уже есть для mocked_validation, я снова попробовал как декоратор, и он не работает

...