如何创建可下标的 Mock 对象?

JPG*_*JPG 7 python unit-testing mocking python-mock python-unittest

假设,我有一个代码片段

foo = SomeClass()
bar = foo[1:999].execute()
Run Code Online (Sandbox Code Playgroud)

为了测试这一点,我尝试了一些

foo_mock = Mock()
foo_mock[1:999].execute()
Run Code Online (Sandbox Code Playgroud)

不幸的是,这引发了一个例外,

类型错误:“模拟”对象不可下标

那么,如何创建可下标的 Mock对象?

wim*_*wim 15

只需使用 aMagicMock代替。

>>> from unittest.mock import Mock, MagicMock
>>> Mock()[1:999]
TypeError: 'Mock' object is not subscriptable
>>> MagicMock()[1:999]
<MagicMock name='mock.__getitem__()' id='140737078563504'>
Run Code Online (Sandbox Code Playgroud)

它之所以被称为“魔术”,是因为它支持__magic__诸如__getitem__.