Jam*_*Lam 5 python unit-testing
我正在尝试patch我的烧瓶API中的方法,但似乎方法调用没有被替换.不app.test_client()这样做,我很想念在引擎盖下的东西.
例如,如果我跑
@patch('k.stats.mstats')
def test_ps(self, mstats):
mstats.return_value = (1, 2, 3)
rv = self.app.get('/ps/')
Run Code Online (Sandbox Code Playgroud)
我通过调试器运行到下面的点:
@app.route('/ps/', methods=['GET'])
def ps():
import pdb
pdb.set_trace()
mstats()
Run Code Online (Sandbox Code Playgroud)
并检查mstats,我将取回未被嘲笑的功能.
但是,如果我从k.stats import mstats断点运行,我会找回我正在寻找的模拟方法.
如何确保调用模拟方法?
这是一个非常令人困惑的概念,但的文档patch尽力解释它。
patch 通过(临时)将名称指向的对象更改为另一个对象。可以有许多名称指向任何单个对象,因此要使修补工作,您必须确保修补被测系统使用的名称。
基本原则是在查找对象的位置打补丁,该位置不一定与定义的位置相同。
这就是为什么当您决定将其注入时能够观察到模拟对象的原因;您正在观察当时正在查找的修补参考。
这个例子很好地解释了那里发生的事情,但我会尽力澄清。
假设它mstats存在于 module 中stats。您正在通过from stats import mstatsmodule导入它use_stats。
你会想要在 中模拟它use_stats,因为那是它的参考位置。
@patch('use_stats.mstats')
def test_stats(self, mstats):
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |