python - 第一次调用后抛出异常

标签 python django mocking magicmock

我有一个循环,用于将记录添加到 zip 文件。我模拟了我的 zipfile 对象,我想抛出一个异常来验证我处理大型 zipfile 的逻辑是否能正常工作。

有没有办法使用 MagicMocks 或普通模拟来接受第一个调用,但在第二个调用时引发异常?

最佳答案

最简单的方法是使用side_effect接受可迭代、可调用或异常(类或实例)

Alternatively side_effect can be an exception class or instance. In this case the exception will be raised when the mock is called.

Quick Guide所示您可以使用 side_effect 简单地通过

引发异常
>>> mock = Mock(side_effect=KeyError('foo'))
>>> mock()
Traceback (most recent call last):
 ...
KeyError: 'foo'

此外,您可以在side_effect 赋值中同时使用list 和Exception。所以做你需要做的最简单的方法是这样的:

>>> m = Mock(side_effect=[1, KeyError("bar"), 3])
>>> m("a")
1
>>> m("b")
 ...
KeyError: 'bar'
>>> m("c")
3

另一种方法是使用可调用对象来编写您的模拟应如何 react 的逻辑。在这种情况下,您可以根据参数或测试状态自由选择。

关于python - 第一次调用后抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654110/

相关文章:

python - 如何获取 View 中选择表单的值?

mysql - 为什么我的查询不是最优的?

unit-testing - 如何仅在第一次调用模拟方法时抛出异常?

rest - 无法根据内容类型 : application/x-www-form-urlencoded 的发布请求创建模拟

python - 为 `mock.patch` 制作包装器

python - tensorflow 2.0 自定义训练循环的学习率

python - Scrapy-类型错误: 'Request' object is not iterable

python - DRF - 序列化器元类中的可选字段列表

jquery - 为什么我在以下 ajax 代码中收到 '500 (Internal Server Error jQuery.min.js:4) ' 错误?

python - 分页在第一页上不起作用。当前路径 &vacancy=2 与其中任何一个都不匹配