Python 模拟:跟踪所有呼叫。Shell与程序不一致
为什么mock.mock_调用的内容会因我是在shell中运行还是在 在节目中?Python 模拟:跟踪所有呼叫。Shell与程序不一致,python,unit-testing,python-3.x,mocking,python-mock,Python,Unit Testing,Python 3.x,Mocking,Python Mock,为什么mock.mock_调用的内容会因我是在shell中运行还是在 在节目中?mock.mock_calls==expected的断言在程序中失败,但在shell中传递。 代码基于跟踪多个调用的文档 输出: <MagicMock name='mock.method()' id='45740272'> <MagicMock name='mock.attribute.method()' id='45850128'> mock.mock_calls [call.metho
mock.mock_calls==expected
的断言在程序中失败,但在shell中传递。
代码基于跟踪多个调用的文档
输出:
<MagicMock name='mock.method()' id='45740272'>
<MagicMock name='mock.attribute.method()' id='45850128'>
mock.mock_calls
[call.method(),
call.method().__str__(),
call.attribute.method(10, x=53),
call.attribute.method().__str__()]
mock.method_calls
[call.method(), call.attribute.method(10, x=53)]
False
True
mock.mock_调用
[call.method(),
call.method()。\uuuu str\uuuuu(),
call.attribute.method(10,x=53),
call.attribute.method()
mock.method\u调用
[call.method(),call.attribute.method(10,x=53)]
假的
真的
我正在Windows 7计算机上运行Python 3.4。这是因为您正在打印方法调用。它导致调用magic方法:
print(mock.method())
print(mock.attribute.method(10, x=53))
消除print()
调用,您将看到所需的行为:
mock.method()
mock.attribute.method(10, x=53)
仅供参考,控制台示例:
>>> mock = unittest.mock.MagicMock()
>>> print(mock.method())
<MagicMock name='mock.method()' id='4433183576'>
>>> print(mock.attribute.method(10, x=53))
<MagicMock name='mock.attribute.method()' id='4433223752'>
>>> mock.mock_calls
[call.method(),
call.method().__str__(),
call.attribute.method(10, x=53),
call.attribute.method().__str__()]
mock.method()
mock.attribute.method(10, x=53)
>>> mock = unittest.mock.MagicMock()
>>> print(mock.method())
<MagicMock name='mock.method()' id='4433183576'>
>>> print(mock.attribute.method(10, x=53))
<MagicMock name='mock.attribute.method()' id='4433223752'>
>>> mock.mock_calls
[call.method(),
call.method().__str__(),
call.attribute.method(10, x=53),
call.attribute.method().__str__()]
>>> mock = unittest.mock.Mock()
>>> print(mock.method())
<Mock name='mock.method()' id='4433235528'>
>>> print(mock.attribute.method(10, x=53))
<Mock name='mock.attribute.method()' id='4433252648'>
>>> mock.method_calls
[call.method(), call.attribute.method(10, x=53)]
>>> mock.mock_calls
[call.method(), call.attribute.method(10, x=53)]