簡體   English   中英

帶補丁的單元測試行為(燒瓶)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM