1

我正在尝试使用 unittest 和 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的返回值。我怎样才能做到这一点?

我也会对不需要双精度且调用者的所有函数都返回 None 并且我必须在特定测试中指定函数的返回值的解决方案感到满意。

4

1 回答 1

0

您可以模拟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)
于 2016-03-18T19:22:29.947 回答