编辑:这可能与此Python错误中描述的问题相同:https://bugs.python.org/issue26752。但是这个bug已经存在了一年,所以我仍然对这里的人们的意见感兴趣。
我不确定这是unittest.mock
中的错误还是我误解了什么。
以下是代码 - 您可以将其另存为test.py
from unittest.mock import patch, call
class Foo:
def __init__(self):
pass
def my_method(self, value):
pass
def test_foo():
with patch('test.Foo', autospec=True) as MockFoo:
m = Foo()
m.my_method(123)
MockFoo.assert_has_calls([call(), call().my_method(123)])
我像这样运行这个测试:
$ py.test test.py
我失败了:
...
E AssertionError: Calls not found.
E Expected: [call(), call().my_method(123)]
E Actual: [call(), call().my_method(123)]
问题:这是正确的行为吗?这对我来说似乎有些不对劲。 调用列表完全匹配,所以给出了什么?
有趣的是,如果我删除了value
的{{1}}参数以及测试中的my_method
输入,那么一切都会过去!
我在这里错过了什么?
版本信息:
123
还在3.5版的virtualenv中试过这个:
$ py.test --version
This is pytest version 3.0.6, imported from /usr/local/lib/python3.4/site-packages/pytest.py
$python3.4 --version
Python 3.4.5
答案 0 :(得分:1)
编辑:删除错误的先前答案。
请你试试:
expected_calls = [call(), call().my_method(123)]
assert MockFoo.mock_calls == expected_calls
这适用于Python 3.5.2。
这可以直接从文档中获取:https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.mock_calls