[英]mocking an instance method of inner object in python 3.4
我的代碼中有一個使用第三方庫的類。 我想通過調用庫類的實例方法來模擬獲得的對象的實例方法。 我不清楚如何模擬此內部對象的實例方法。 以下是我的代碼:
我的課:
from a import A
class MyClass(object):
def __init__(self):
self.obj = A()
def do_something(self):
b = self.obj.get_inner_object()
result = b.do_inner()
return result
這是我的測試課:
from unittest import TestCase
from unittest.mock import MagicMock
from unittest.mock import patch
from a import A
class TestMyClass(TestCase):
def __init__(self):
self.my_class = MyClass()
@patch.object(A,'get_inner_object')
def test_do_something(self, mock_get_inner_object):
test_res = self.my_class.do_something()
正如您在上面看到的,我想模擬掉我的庫的2個方法-get_inner_object()和do_inner(),它們是get_inner_object()返回的對象的實例方法。 我能夠模擬get_inner_object(),但不清楚如何模擬do_inner()方法。 請澄清。 這是我正在關注的幫助: https : //www.toptal.com/python/an-introduction-to-mocking-in-python
只是模擬出所有A
:
@patch('a.A')
def test_do_something(self, mock_A):
mock_b = mock_A.return_value.get_inner_object.return_value
mock_b.do_inner.return_value = 'mocked return value'
test_res = self.my_class.do_something()
self.assertEqual(test_res, 'mocked return value')
畢竟,您在這里測試MyClass
,而不是A
無論哪種方式,無論您使用@patch.object(A, 'get_inner_object')
還是修補所有A
, self.obj.get_inner_object()
表達式都將調用 Mock
實例,因此.return_value
將返回.return_value
屬性。 do_inner
方法只是此處返回的模擬的另一個鏈式調用,因此您可以通過將.return_value
屬性設置為要測試的內容來設置該方法返回的內容。
要將其轉換回您的@patch.object()
情況, mock_b
然后是mock_inner_object.return_value
對象:
@patch.object(A,'get_inner_object')
def test_do_something(self, mock_get_inner_object):
mock_b = mock_get_inner_object.return_value
mock_b.do_inner.return_value = 'mocked return value'
test_res = self.my_class.do_something()
self.assertEqual(test_res, 'mocked return value')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.