assert_called_with 的奇怪行为
Strange behaviour of assert_called_with
我正在处理 assert_called_with 的奇怪行为。我的模拟工作正常,但如果我尝试比较调用该函数的参数,我会收到错误消息(如下):
data = {"result": {"fizz": "buzz"}}
mock = MagicMock()
mock.configure_mock(**{"post.return_value": mock, "json.return_value": data})
dispatcher.session = mock
@dispatcher.dispatch()
def test():
pass
test() # here calls self.session.post(...).json()
assert mock.post.assert_called_with()
无参数:
assert mock.post.assert_called_with()
我收到错误(如预期):
> assert mock.post.assert_called_with()
E AssertionError: expected call not found.
E Expected: post()
E Actual: post('', json={'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}})
E
E pytest introspection follows:
E
E Args:
E assert ('',) == ()
E Left contains one more item: ''
E Full diff:
E - ()
E + ('',)
E Kwargs:
E assert {'json': {'id...'params': {}}} == {}
E Left contains 1 more item:
E {'json': {'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}}}
E Full diff:
E - {}
E + {'json': {'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}}}
但是,如果我像这样传递被调用的参数:
assert mock.post.assert_called_with(
"", json={"id": 0, "jsonrpc": "2.0", "method": "test", "params": {}}
)
我得到了
> assert mock.post.assert_called_with(
"", json={"id": 0, "jsonrpc": "2.0", "method": "test", "params": {}}
)
E AssertionError: assert None
E + where None = <bound method wrap_assert_called_with of <MagicMock name='mock.post' id='140014005058048'>>('', json={'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}})
E + where <bound method wrap_assert_called_with of <MagicMock name='mock.post' id='140014005058048'>> = <MagicMock name='mock.post' id='140014005058048'>.assert_called_with
E + where <MagicMock name='mock.post' id='140014005058048'> = <MagicMock id='140014005036992'>.post
删除前导 assert
调用。它应该只是 mock.post.assert_called_with()
。它失败了,因为在模拟对象的断言之前有一个 assert
。由于 mock.post.assert_called_with()
returns None
您的测试失败,因为它的计算结果为 assert None
。您可以在 documentation here.
中查看更多信息
我正在处理 assert_called_with 的奇怪行为。我的模拟工作正常,但如果我尝试比较调用该函数的参数,我会收到错误消息(如下):
data = {"result": {"fizz": "buzz"}}
mock = MagicMock()
mock.configure_mock(**{"post.return_value": mock, "json.return_value": data})
dispatcher.session = mock
@dispatcher.dispatch()
def test():
pass
test() # here calls self.session.post(...).json()
assert mock.post.assert_called_with()
无参数:
assert mock.post.assert_called_with()
我收到错误(如预期):
> assert mock.post.assert_called_with()
E AssertionError: expected call not found.
E Expected: post()
E Actual: post('', json={'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}})
E
E pytest introspection follows:
E
E Args:
E assert ('',) == ()
E Left contains one more item: ''
E Full diff:
E - ()
E + ('',)
E Kwargs:
E assert {'json': {'id...'params': {}}} == {}
E Left contains 1 more item:
E {'json': {'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}}}
E Full diff:
E - {}
E + {'json': {'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}}}
但是,如果我像这样传递被调用的参数:
assert mock.post.assert_called_with(
"", json={"id": 0, "jsonrpc": "2.0", "method": "test", "params": {}}
)
我得到了
> assert mock.post.assert_called_with(
"", json={"id": 0, "jsonrpc": "2.0", "method": "test", "params": {}}
)
E AssertionError: assert None
E + where None = <bound method wrap_assert_called_with of <MagicMock name='mock.post' id='140014005058048'>>('', json={'id': 0, 'jsonrpc': '2.0', 'method': 'test', 'params': {}})
E + where <bound method wrap_assert_called_with of <MagicMock name='mock.post' id='140014005058048'>> = <MagicMock name='mock.post' id='140014005058048'>.assert_called_with
E + where <MagicMock name='mock.post' id='140014005058048'> = <MagicMock id='140014005036992'>.post
删除前导 assert
调用。它应该只是 mock.post.assert_called_with()
。它失败了,因为在模拟对象的断言之前有一个 assert
。由于 mock.post.assert_called_with()
returns None
您的测试失败,因为它的计算结果为 assert None
。您可以在 documentation here.