簡體   English   中英

無法模擬 Python (Django) 中的函數

[英]Unable to mock a function in Python (Django)

我正在嘗試模擬我正在測試的函數中使用的一個函數,但由於某種原因,我沒有看到原始函數總是在運行,而不是我作為模擬創建的函數。

我正在測試的代碼具有這種類型的設置:

def function_being_tested(foo):
    ...
    function_i_want_to_mock(bar)
    ...

def function_i_want_to_mock(bar)
    print("Inside original function")
    ...

我已經安裝了 Mock 並嘗試使用 unittest.mock 補丁

目前測試文件使用這個設置:

import mock
from django.test import TestCase


def mock_function_i_want_to_mock(bar):
    print(bar)
    return True


class SupportFunctionsTestCases(TestCase):

    @mock.patch("path.to.function.function_i_want_to_mock", mock_function_i_want_to_mock)
    def test_function_being_tested(self):
        # setup
        result = function_being_tested(test_foo)
        self.assertEqual(result, expected_result)

然后發生的是,當我運行測試時,我總是得到:“在原始函數內部”,而不是打印的參數,所以它總是在運行原始函數。

我之前使用過這個確切的設置並且它有效,所以我不確定是什么導致了這個。 可能是一些錯誤的設置...

如果有人有不同的方式來做這件事或發現一些錯誤,我們將不勝感激。

"path.to.function.function_i_want_to_mock"應該是使用函數的路徑,而不是定義。

所以,如果function_i_want_to_mock被定義moduleA.py但進口和使用moduleB.py您正在測試,那么你應該使用@mock.patch("path.to.moduleB.function_i_want_to_mock", ...)

暫無
暫無

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

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