[英]Unit Test Behavior with Patch (Flask)
我正在尝试patch
我的烧瓶api中的方法,但似乎方法调用没有被替换。 app.test_client()
是否在我缺少的引擎盖下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
,我会找回我正在寻找的k.stats import mstats
方法。
如何确保调用模拟方法?
这是一个相当令人困惑的概念,但patch
的文档尽力解释它。
patch通过(临时)更改名称指向的对象与另一个对象。 可以有许多名称指向任何单个对象,因此要进行修补工作,必须确保修补被测系统使用的名称。
基本原则是修改查找对象的位置,该位置不一定与定义对象的位置相同。
这就是为什么当你决定将它注入时,你能够观察到被模拟的对象; 你正在观察那个时刻被抬起的修补参考。
这个例子可以很好地解释那里发生了什么,但我会试着澄清一下。
让我们说mstats
存在于模块stats
。 您from stats import mstats
模块use_stats
from stats import mstats
导入它。
你将要在use_stats
模拟它,因为那是它的参考地点。
@patch('use_stats.mstats')
def test_stats(self, mstats):
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.