2016-10-01 111 views
-1

我正在爲函數f寫入單元測試,該函數導入單元測試不直接與之交互的其他函數/類。有什麼辦法可以從單元測試中修補這些函數(也許在set_up())中?使用模擬和補丁進行單元測試

僅供參考,我使用Python 2.7。

從unittest中,我想修改/修補helper的行爲。

在單元測試文件:

def test_some_function(): 
    assert(some_function() == True) 

在some_function()定義

import helper 
def some_function(): 
    foo = helper.do_something() 
    return foo & bar 
+1

請提供您場景的[mcve]。即顯示您的代碼和測試代碼並解釋您遇到的問題。 – idjaw

+0

已編輯。希望這已經足夠了。我不認爲我可以粘貼更多的代碼,因爲這是更常見的問題。我知道我可以在單個文件中打補丁等,但我希望能夠改變單元測試的行爲。我嘗試使用set_up()補丁命令,但無法使其工作。 – PK5144

+1

所以,你想控制'helper.do_something'做什麼?換句話說,你正在試圖控制它的返回來編寫'some_function'的單元測試嗎?因爲這絕對是可行的 – idjaw

回答

1

懲戒出模塊是相當標準和記錄here。你會看到一個相當明確的例子,說明它是如何完成的。

此外,瞭解where to patch以瞭解如何正確地模擬其他腳本中的模塊很重要。

爲您提供參考你的代碼更明顯的例子,你想要做這樣的事情:

import unittest 
from unittest.mock import patch 

import module_you_are_testing 

class MyTest(unittest.TestCase): 

    @patch('module_you_are_testing.helper') 
    def test_some_function(self, helper_mock): 
     helper_mock.do_something.return_value = "something" 
     # do more of your testing things here 

所以,要記住最重要的事情,就是你相對於參考helper其中您正在測試。看看我提供的示例代碼,你會看到我們正在導入module_you_are_testing。所以,這是你嘲笑。