我在通过“过程式”函数调用的对象方法中模拟构造函数的调用而苦苦挣扎。
为了更好地理解,这里是我的简短版本代码:
from src.b.oee_retriever import OeeRetriever
oee_retriever = OeeRetriever()
def handler(event, context):
return oee_retriever.call_repo()
from src.b.oee_repo import OeeRepo
class OeeRetriever():
oee_repo = None
def __init__(self):
self.oee_repo = OeeRepo()
print('Type: ' + str(type(self.oee_repo)))
def call_repo(self):
print('calling repo')
return self.oee_repo.do()
现在,我只想测试 lambda_function.handler()
函数,并想模拟 OeeRepo()
中的构造函数调用oee_retriever.__init__()
< / p>
我尝试过:
from unittest import TestCase
from unittest.mock import Mock, patch
from src.b.lambda_function import handler
class OeeLambdaFunctionTest(TestCase):
@patch('src.b.oee_repo.OeeRepo')
def test_bar(self, oee_repo):
my_mock = Mock()
my_mock.do.return_value = 'nope'
oee_repo.return_value = my_mock
result = handler(None, None)
self.assertEqual(result, 'nope')
模拟结果应为“ nope”,但将调用实函数oee_repo.do()
。
我也尝试使用@patch('src.b.oee_retriever.OeeRepo')
,但在这种情况下也叫oee_repo.do()
。
如何模拟OeeRepo()
构造函数调用?