我在使用python2.7.15rc1。我试图模仿迭代器,以便它在迭代时抛出异常。 例如:
elements = [1,2,3,Exception('boom!')]
iterable = <create a mock iterable to iterate over "elements">
# this does not print anything.
for value in iterable:
...
我尝试过在MagicMock
实例的next()
方法上使用side_effect
属性,如下所示:
我假设for
循环将在mocked_iterable
上调用__iter__
,这将返回另一个模拟对象,其next
属性具有side_effect
。我的期望是循环将以调用mocked_next.next()
结束,它将迭代我在side_effect
中提供给它的列表。在
显然,我的理解是不正确的。我错过了什么?这可以完全使用mock实现吗,还是必须创建一个自定义迭代器来实现这种行为?在
编辑:我试图测试一段代码的异常处理部分,该代码迭代iterable,因此尝试模拟迭代器引发异常。在
您要查找的内容不适合
MagicMock
,因为side_effect
可以是异常,也可以是iterable,但不能两者都是。您应该使用__iter__
方法创建一个类,该方法按给定的序列生成项,然后引发给定的异常:该输出:
^{pr2}$相关问题 更多 >
编程相关推荐