簡體   English   中英

Python模擬功能和導入模擬

[英]Python Mock Function and Import Mock

在我的測試文件中,我想模擬模塊中包含的輔助函數。 我能夠“成功”(即,由於所有內容均正確鏈接,因此沒有編譯或運行時錯誤)對函數進行模擬,但是模擬不會滴入要測試的類。

我已經研究了依賴注入,但是我不確定如何注入我的模塊,該模塊目前僅模擬了一個函數。 最終,我計划模擬幾乎所有功能。 我只想先獲得一個基准。

這是我到目前為止的

class FooTestCase(unittest.TestCase):

    @mock.patch('modules.MyHelperModule.helper_function')
    def test_simple(self, mock_hf):

        my_obj = MyObj()

        # internally, this class imports HelperModule 
        # and the method calls helper_function with 1
        my_obj.do_something()

        mock_hf.helper_function.assert_called_with(1)

        return

assert命令失敗,並報告從未調用該方法。 我假設模擬永遠不會通過my_obj。

我知道我可以在MyObj的init方法中創建一個標志,例如testing = False並相應地導入模塊,但是如何導入僅在測試文件中模擬的模塊? 這是我現在正在考慮的方法,但是我願意接受其他獲得相同結果的實現。

為了回應Daniel Roseman的評論,

在MyOBJ中,我有以下幾行

from modules.HelperModule import helper_function

但是,我得到了錯誤

ImportError: No module named modules

我的接線現在看起來像

@mock.patch('MyObj.modules.HelperModule.helper_function')

任何幫助總是值得贊賞的; 謝謝!

我想問題是,您不是想對ock_hf進行修補。 嘗試:

from unittest.mock import patch
class FooTestCase(unittest.TestCase):


def test_simple(self):
    with patch('modules.MyHelperModule.helper_function') as mock_hf:
        my_obj = MyObj()
        my_obj.do_something()
        mock_hf.assert_called_with(1)

正如丹尼爾·羅斯曼(Daniel Roseman)在我的原始帖子中的評論中所提到的,問題出在我修補的位置。

我應該在修補MyObj.helper_function。 另外,我在init .py文件中有一個從MyObj導入MyObj的文件。 這使我只能在測試中引用MyObj類,但是我需要覆蓋整個文件的helper_function。 我必須刪除該行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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