firs后抛出异常

2024-09-19 23:42:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个循环,在这里我处理向zip文件添加记录的操作。我已经嘲弄了我的zipfile对象,我想引发一个异常来验证我处理大型zipfile的逻辑是否能正确工作。在

MagicMocks或普通mocks有没有办法接受第一个调用,但在第二个调用上引发异常?在


Tags: 文件对象记录逻辑zipmockszipfile办法
2条回答

最简单的方法是使用接受iterable、callable或Exception(类或实例)的^{}

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

另一种方法是使用callable编写mock应该如何反应的逻辑。在这种情况下,您可以自由选择是否基于参数或测试的状态。在

有一个发生器和模拟的侧面效果

from unittest.mock import Mock

def sample_generator():
    yield 1
    yield 2
    raise Exception()

gen = sample_generator()

def sideeffect():
    global gen
    for x in gen:
        return x


m = Mock(side_effect=sideeffect)
m() #1
m() #2
m() #3

你可以得到:

^{pr2}$

我相信你可以稍微弄干净一点,但它应该能解决你的基本问题

相关问题 更多 >