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]