擅长:python、mysql、java
<p>我从<a href="https://stackoverflow.com/a/67564227/9580675">@slideshowp2's answer</a>开始,对事情做了一些不同的修改。在我的例子中,我有多个这样的测试函数,它们模拟funB并调用run_demo(最初是来自Django.test的client.post()调用)。如果先前的函数调用成功,则其他后续修补程序将失败(原因与@slideshowp2所述相同)。所以,我改变了这个方法:-<br/></p>
<p><strong>在fun\u list.py中(funA和funB是其他模块中的两个函数)</strong></p>
<pre><code>import other_module
FUN_LIST = [
'funA',
'funB',
]
def run_funs():
for fun in FUN_LIST:
getattr(other_module, fun)()
</code></pre>
<p><strong>在demo.py中</strong></p>
<pre><code>from fun_list import run_funs
def run_demo():
...
run_funs()
...
</code></pre>
<p><strong>在test\u demo.py中</strong></p>
<pre><code>from demo import run_demo
@patch('other_module.funB')
def test_demo_funs(mocked_funB):
mocked_funB.return_value = {}
run_demo()
assert mocked_funB.called
</code></pre>