我有一个像这样的测试:
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()
内部调用已被嘲笑为someFunk2
somemodule2
mock_rr
在测试调试中它确实调用了它,因为我打印了一行,someFunk2
但是在调用它时测试它 mock_rr.assert_called()
,它抛出:
AssertionError: Expected 'mock_2' to have been called.
我尝试了几种使用 patch 和 patch.object 的方法