[英]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.