我正在尝试在我的Flask API中使用patch
方法,但似乎该方法调用并未被替换。 app.test_client()
是否在我不了解的情况下做了某些事情。
例如,如果我运行
@patch('k.stats.mstats')
def test_ps(self, mstats):
mstats.return_value = (1, 2, 3)
rv = self.app.get('/ps/')
我将调试器运行到以下几点:
@app.route('/ps/', methods=['GET'])
def ps():
import pdb
pdb.set_trace()
mstats()
并检查
mstats
,我将取回未模拟的功能。但是,如果我从断点处从
k.stats import mstats
运行,我会得到想要的模拟方法。如何确保模拟方法被调用?
最佳答案
这是一个非常令人困惑的概念,但是the documentation of patch
尽力解释它。
这就是为什么当您决定将其注入(inject)时能够观察到该模拟对象的原因。您正在观察当时正在查找的修补引用。
该示例可以很好地解释那里发生的事情,但我会尽力弄清楚。
假设mstats
位于stats
模块中。您正在通过from stats import mstats
模块中的use_stats
导入它。
您将要在use_stats
中对其进行模拟,因为这是其引用的地方。
@patch('use_stats.mstats')
def test_stats(self, mstats):
pass