在unittest.m中加倍对象

2024-04-24 14:30:46 发布

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

我正在尝试将unittest用于单元测试.mock在我的应用程序中做一些测试。你知道吗

我有两个班:MainClass和Caller。我想用双调用者测试主类。简而言之,我有:

class MainClass:

 def __init__(self, caller):
   self.caller = caller

 def some_function(self):
   self.caller.function1()
   blab = self.caller.function2()

class Caller:

 # some functions non of which should be accessed in tests


class CallerMock:
  def __init__(self):
   self.items = []

  def function1(self):
   pass

  def function2(self):
    return items

在测试中,我会:

class TestMainFunction(unittest.TestCase):

    def setUp(self):
        self.mock = MagicMock(wraps=CallerMock())
        self.main_class = MainClass(self.mock)

    def test(self):
        # self.main_class.caller.items = items
        # self.mock.items = items
        # self.mock.function2.return_value = items
        self.main_class.some_functions()
        # non of the above change the return value of function2

然而,问题是,没有一行被注释过,实际上改变了function2的返回值。我怎样才能做到这一点?你知道吗

如果我不需要double,调用者的所有函数都将返回None,并且我必须在特定的测试中指定函数的返回值,那么我也很乐意使用这种解决方案。你知道吗


Tags: ofselfreturnmaindefitemssomeunittest
1条回答
网友
1楼 · 发布于 2024-04-24 14:30:46

您可以模拟Caller,然后修补call()方法。这样,您就不需要双人床了:

def setUp(self):
    self.mocked_caller = mock.Mock(spec=Caller)
    self.mocked_caller.call.return_value = items
    self.main_class = MainClass(self.mocked_caller)

def test(self):
    self.main_class.some_function()
    self.assertTrue(self.mocked_caller.called)

相关问题 更多 >