我正在努力模拟一个由“过程”函数调用的对象方法中的构造函数调用。
为了更好地理解这里是我的代码作为一个简短的版本:
文件 ./src/b/lambda_function.py:
from src.b.oee_retriever import OeeRetriever
oee_retriever = OeeRetriever()
def handler(event, context):
return oee_retriever.call_repo()
文件 ./src/b/oee_retriever.py:
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__()
我试过了:
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()
构造函数调用?