【发布时间】:2020-04-11 00:13:56
【问题描述】:
这个问题是我上一个问题here的后续问题
我想定义一个fixture,它会为它的每个参数运行一个函数,然后再返回给我。
但是,如果没有另一个验证函数被模拟,该函数就无法运行,因为没有文件系统就无法执行验证。
这是目前的样子:
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
但是,在验证期间,fixture 将在 basic_parser.parser() 调用中失败。
我使用这个 mock 进行测试,它运行良好,所以它必须与它在夹具中的事实有关。
有没有办法做到这一点?我不希望每次测试都重复这行代码
这可以用下面的类来测试:
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
【问题讨论】: