2016-07-12 106 views
0

我有一個tastypie REST API資源,比如說叫Resource,它的obj_get方法中導入並使用了一個叫做get_token的函數,它的編號爲libs.utils模擬補丁不能正確替換功能

因此,爲了測試這個資源,在我的測試類,我創建像什麼如下測試:

mock_get_token = Mock(return_value="something") 

@patch("path.to.resource.get_token", mock_get_token) 
def test_get_token(self): 
    params = {"args": "args"} 
    # following call should call the get_token function in the resource 
    response = self.client.get("path/to/resource", params) 
    # do things with the response and make sure I get right output 

所以,當我通過自身運行測試中,@patch正常工作和預期,更換功能與模擬功能。但是,在我們的應用程序的較大測試套件中運行測試會導致修補程序失敗。

做一些事情,比如手動嘗試用模擬函數代替函數也有一個不成功的補丁。我想知道還有什麼可能導致這個問題,我發現它非常好奇,當測試是由自己或我們的測試套件的一個較小的子集運行時,該補丁正常工作。

回答

0

我們無法弄清楚確切的解決方案,但一個解決方法是,因爲obj_get方法中的大多數邏輯都是由另一個函數api_call()處理的,我們嘲笑了撥打api_call函數的呼叫。

所以這個問題似乎是一些進口問題,因爲api_call沒有導入任何地方。

0

看看已知的gotchas。這可能是你試圖修補錯誤的地方...