首页 > 解决方案 > 如何创建一个可下标的 Mock 对象?

问题描述

假设,我有一个代码片段

foo = SomeClass()
bar = foo[1:999].execute()

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

foo_mock = Mock()
foo_mock[1:999].execute()

不幸的是,这引发了一个异常,

TypeError:“模拟”对象不可下标

那么,我怎样才能创建一个可下标的 Mock对象呢?

标签: pythonunit-testingmockingpython-unittestpython-mock

解决方案


只需使用 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'>

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


推荐阅读