我有一个返回布尔值的函数列表. 它的名字都是这样的:
for f in functions:
if f():
pass
我正在编写测试,我想模拟这些函数的结果
@pytest.fixture
def is_first_func_mock(mocker):
mock = mocker.patch.object(SomeClass, 'first_func')
return mock
然后在测试中的某个地方,我通过了这一测试,并写道
is_first_func_mock.return_value = True
或更多
但是,由于我没有直接在代码中调用函数,而且我在上面已经指出了这一点,所以mock不起作用.
我在Stackoverflow中找到了一个解决方案: 我可以像这样调用函数:
if getattr(funcs_module, func.__name__)():
pass
但我不喜欢它,我不想改变循环
最新情况:
def some_name(fucntions: list[callable]):
def inner(func):
@wraps(func)
async def wrapper(*args, **kwargs):
#some code
for f in functions:
if f():
return await func(*args, **kwargs)
raise SomePermission
return wrapper
return inner