2024-09-19 23:42:57 发布
网友
我有一个循环,在这里我处理向zip文件添加记录的操作。我已经嘲弄了我的zipfile对象,我想引发一个异常来验证我处理大型zipfile的逻辑是否能正确工作。在
MagicMocks或普通mocks有没有办法接受第一个调用,但在第二个调用上引发异常?在
最简单的方法是使用接受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.
side_effect
如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
你可以得到:
我相信你可以稍微弄干净一点,但它应该能解决你的基本问题
最简单的方法是使用接受iterable、callable或Exception(类或实例)的^{}
如Quick Guide所示,您可以使用
side_effect
来引发异常,只需此外,您可以在
side_effect
赋值中同时使用list和Exception。所以最简单的方法就是这样:另一种方法是使用callable编写mock应该如何反应的逻辑。在这种情况下,您可以自由选择是否基于参数或测试的状态。在
有一个发生器和模拟的侧面效果
你可以得到:
^{pr2}$我相信你可以稍微弄干净一点,但它应该能解决你的基本问题
相关问题 更多 >
编程相关推荐