Python 如何表示unittest.mock.call()

Python 如何表示unittest.mock.call(),python,unit-testing,mocking,python-unittest,python-mock,Python,Unit Testing,Mocking,Python Unittest,Python Mock,我正在使用的一个模拟包含调用call()。\uu str\uu() my\u mock.mock\u调用的输出 [call(<MagicMock name='mock()' id='140630678530704'>, indent=2, sort_keys=True), call().__str__(), # <-- what I'm trying to represent call()] 如果我理解正确,您需要检查给定的调用是否在mock\u c

我正在使用的一个模拟包含调用
call()。\uu str\uu()

my\u mock.mock\u调用的输出

[call(<MagicMock name='mock()' id='140630678530704'>, indent=2, sort_keys=True),
 call().__str__(),            # <-- what I'm trying to represent
 call()]

如果我理解正确,您需要检查给定的调用是否在
mock\u calls
中。 检查方法是否已被调用的标准方法是在创建的实例上使用
assert\u called\u xxx
方法之一:

@mock.patch('mymodule.SomeClass')
def test1(mocked):
    inst = SomeClass()  # inst == mocked.return_value
    inst.__str__.assert_not_called()

    # use this if you don't have inst
    mocked.return_value.__str__assert_not_called()

    print(inst)
    inst.__str__.assert_called_once()
    mocked.return_value.assert_called_once()
    mocked.return_value.__str__.assert_called_once()
请注意,您没有在
mocked
上检查
call()。\uuuuu str\uuuu
,而是在
mocked上检查
\uuuu str\uuuu
。返回值
,这是
call()
的结果

如果出于某种原因需要直接检查该调用的字符串表示形式,例如
call.\uuu str\uuu()
,则必须检查该字符串:

assert 'call.__str__()' in [str(c) for c in inst.mock_calls]
或者,如果您想在类中检查它:

assert 'call().__str__()' in [str(c) for c in mocked.mock_calls]
编辑:
正如@user2357112supportsMonica所指出的,删除了不工作版本,修复了
mocked

的错误用法。您能显示相关代码吗?我不确定我是否理解您试图实现的目标。@Beanbremen先生,我添加了输出以显示结果。我仍然不确定我是否理解您的要求-请检查下面的答案是否有帮助。
mocked.\uu str\uu
不是mock,也没有一个
assert\u调用过一次的
方法。如果你这样做的话,你会得到一个
属性错误
。mock中的
str\uuuuuuuuuuuuuuuuuuuuuuuuuu调用
检查在我测试它时也会产生各种挂起和不正确的结果。好吧,这很奇怪,我测试了它Ok-你使用
mock.patch
来修补
某个类
?你能检查
mocked
mocked的类型吗?两者都应该是
MagicMock
。如果使用MagicMock,则看起来像是MagicMock。但是,
检查中的
的挂起和错误结果仍然会在MagicMock中发生。例如,.Ok,我想我理解其中的区别-您直接创建一个
MagicMock
,而我从一个真实的类创建mock,它总是有一个
\uu str\uu
方法。我可以重现您的问题,但这是因为
MagicMock
没有使用对象初始化。
assert 'call().__str__()' in [str(c) for c in mocked.mock_calls]