断言错误在 Python 中的简单模拟上“未调用”

sea*_*ges 3 python mocking

我第一次尝试使用 Python 模拟模块(使用 pip 下载)。我在设置断言时遇到问题,我已将其范围缩小到以下代码:

class TestUsingMock(unittest.TestCase):

    def setUp(self):
        self.fake_client = mock.Mock()

    def test_mock(self):
        self.fake_client.copy = mock.Mock()
        self.fake_client.copy("123")
        self.fake_client.assert_called_with("123")

if __name__ == "__main__":
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

F
======================================================================
FAIL: test_mock (__main__.TestVCSDriver)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./mock_test.py", line 17, in test_mock
    self.fake_client.assert_called_with("123")
  File "/Library/Python/2.6/site-packages/mock.py", line 859, in assert_called_with
    raise AssertionError('Expected call: %s\nNot called' % (expected,))
AssertionError: Expected call: mock('123')
Not called
Run Code Online (Sandbox Code Playgroud)

没有断言,一切正常。我究竟做错了什么?

Fer*_*yer 7

您正在调用 object self.fake_client.copy,但测试是否self.fake_client已调用另一个对象。

要么调用“正确”对象:

self.fake_client("123")
self.fake_client.assert_called_with("123")
Run Code Online (Sandbox Code Playgroud)

或测试copy

self.fake_client.copy("123")
self.fake_client.copy.assert_called_with("123")
Run Code Online (Sandbox Code Playgroud)