如果,除了其他建议的解决方案之外,您真的想要嘲笑它,并且想要自己做(不使用模拟库),只需更换模拟函数即可。
# Your code (or module):
def bool_function(n):
print('REAL bool-function {}'.format(n))
return n <= 0
def factorial(n):
print('FACT {}'.format(n))
if bool_function(n):
return 1
else:
return n * factorial(n-1)
# Mocking code (or module):
def mock_function(n):
print('MOCK bool-function {}'.format(n))
global bool_function
bool_function = bool_func_orig # restore on the first use
return False
bool_func_orig = bool_function
bool_function = mock_function # mock it
# Go run it!
factorial(10)
如果这些是两个单独的模块,然后代替global bool_function
& bool_function=...
只是使用somemodule.bool_function=...
。
如果你想使用模拟库,那么它取决于你使用的库。如果是unittest.mock
,那么你应该使用side_effect=...
& wraps=...
(请参阅manual)。同样的方法:嘲笑它,并从第一次使用时的副作用中取消它。
你使用unittest吗? –
除非'bool_function'有副作用,为什么要麻烦。你不能只用'n'来测试你知道命中了'真'吗? – Sylwester