![](/img/trans.png)
[英]Mocking a function inside a function in Python Unit Testing using Mock
[英]Python Mock: Mocking a function inside the function I'm testing
我正在嘗試使用Mock
測試從檢索設置的函數返回的結果:
def apply_delta_to_date(original_date):
delta = MySettings.get_delta()
result_date = original_date + timedelta(delta)
return result_date
在測試apply_delta_to_date
函數時,我正在嘗試模擬對MySettings.get_delta
的調用,以模擬其返回特定結果的情況:
class TestAppyDelta():
def setUp(self):
self.MySettings = Mock()
self.MySettings.get_delta = Mock(return_value=10)
def test_apply_delta(self):
result = apply_delta_to_date(today)
問題是我無法“模擬”對MySettings.get_delta()
的函數調用,該函數位於我真正要測試的函數中。
如何模擬正在測試的函數中內部函數返回的結果?
您根本沒有嘲笑正確的事情。 您要做的就是在測試類中定義MySettings屬性。 從來沒有任何東西調用它。
您需要在調用MySettings的地方對其進行模擬。 假設你要導入apply_delta_to_date
從一個名為模塊my_delta_module
:
@patch('my_delta_module.MySettings')
def test_apply_delta(self, mock_settings):
mock_settings.get_delta.return_value = 10
result = apply_delta_to_date(today)
您需要的是patch.object上下文管理器,它可以完全滿足您的要求:它使用一個類和方法,並允許您定義自定義返回值。
from unittest.mock import patch
from <your-time_utils-module> import apply_delta_to_date, MySettings
class TestAppyDelta():
def test_apply_delta(self):
with patch.object(MySettings, 'get_delta', return_value=10) as mock_method:
result = apply_delta_to_date(today)
# mock_method has many other useful assertions
mock_method.assert_called_once()
有關更多詳細信息,請參考文檔https://docs.python.org/3/library/unittest.mock.html#quick-guide
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.