当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python unittest.mock.Mock.side_effect用法及代码示例


用法:

side_effect

这可以是调用模拟时要调用的函数、可迭代的或要引发的异常(类或实例)。

如果你传入一个函数,它将使用与模拟相同的参数调用,除非函数返回 DEFAULT 单例,否则对模拟的调用将返回函数返回的任何内容。如果函数返回 DEFAULT 则模拟将返回其正常值(来自 return_value )。

如果您传入一个可迭代对象,则它用于检索一个迭代器,该迭代器必须在每次调用时产生一个值。此值可以是要引发的异常实例,也可以是要从模拟调用返回的值(DEFAULT 处理与函数案例相同)。

引发异常的模拟示例(用于测试 API 的异常处理):

>>> mock = Mock()
>>> mock.side_effect = Exception('Boom!')
>>> mock()
Traceback (most recent call last):
  ...
Exception: Boom!

使用 side_effect 返回一系列值:

>>> mock = Mock()
>>> mock.side_effect = [3, 2, 1]
>>> mock(), mock(), mock()
(3, 2, 1)

使用可调用:

>>> mock = Mock(return_value=3)
>>> def side_effect(*args, **kwargs):
...     return DEFAULT
...
>>> mock.side_effect = side_effect
>>> mock()
3

side_effect 可以在构造函数中设置。下面是一个示例,它将调用模拟的值加一并返回它:

>>> side_effect = lambda value: value + 1
>>> mock = Mock(side_effect=side_effect)
>>> mock(3)
4
>>> mock(-8)
-7

side_effect 设置为 None 会清除它:

>>> m = Mock(side_effect=KeyError, return_value=3)
>>> m()
Traceback (most recent call last):
 ...
KeyError
>>> m.side_effect = None
>>> m()
3

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 unittest.mock.Mock.side_effect。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。