0

我有一个像这样的测试:

import somemodule
import somemodule2

class SomeTestCase(unittest.TestCase):

  def setUp(self):
    super().setUp()
    self.ft_mock = mock.MagicMock(spec=somemodule.SomeClass,
                                  name='mock_it')

  def tearDown(self) -> None:
    self.ft_mock.reset_mock(return_value=True, side_effect=True)

  @mock.patch('somemodule2.someFunk2',
                     name = 'mock_2',
                     spec=True,
                     side_effect='some val')
  def testSomething(self, mock_rr):
    m = self.ft_mock
    m.addMemberSomething()
    self.assertEqual(len(m.addMember.call_args_list), 1)
    m.addSomethingElse.return_value = 'RETURN IT'
    m.addSomethingElse()
    m.addSomethingElse.assert_called_once()
    res = somemodule.FooClass.foo()
    mock_rr.assert_called()

这里的somemodule.FooClass.foo()内部调用已被嘲笑为someFunk2somemodule2mock_rr

在测试调试中它确实调用了它,因为我打印了一行,someFunk2但是在调用它时测试它 mock_rr.assert_called(),它抛出:

AssertionError: Expected 'mock_2' to have been called.

我尝试了几种使用 patch 和 patch.object 的方法

4

1 回答 1

0

问题是somemodulesomeFunk2somemodule2. 因此,在修补/模拟时,修补的对象来自 somemodule2 而需要修补的对象somemodule.someFunk2

于 2019-12-26T10:15:43.130 回答