Python模拟“嵌套”结构

2024-04-25 08:06:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力模仿一个对象方法中的构造函数调用,这个对象方法是由一个“过程”函数调用的

为了更好地理解,以下是我的代码的简短版本:

文件./src/b/lambda\u function.py:

from src.b.oee_retriever import OeeRetriever

oee_retriever = OeeRetriever()
def handler(event, context):
  return oee_retriever.call_repo()

文件./src/b/oee\u 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()函数,并且我想模拟oee_retriever.__init__()中的构造函数调用OeeRepo()

我试过:

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()构造函数调用?


Tags: lambdafromimportselfsrcreturndefrepo