如果,除了其他建議的解決方案之外,您真的想要嘲笑它,並且想要自己做(不使用模擬庫),只需更換模擬函數即可。
# 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