给定以下 Python 代码:
elif request.method == 'DELETE':
try:
os.remove(full_file)
return jsonify({'results':'purged %s' % full_file})
except OSError as e:
if e.errno != errno.ENOENT:
raise
return jsonify({'results':'file not present: %s' % full_file})
我想测试所有可能的路径,包括异常处理。使用 Mock,很容易raise一个例外,我用这段代码来做:
with patch('os.remove', new=Mock(side_effect=OSError(errno.ENOENT))):
self.assertRaises(OSError, self.app.delete, file_URL) # broken
Mock 引发异常,其打印值为 2 (ENOENT) - 但是e.errno设置为“无”。而且到目前为止,我还没有找到设置的方法。结果是,总是出现异常重新加注,并且在单元测试中我从未到达最后一行代码。
我还尝试创建一个带有 errno 设置的虚拟类,然后返回它。但除非它设置了要调用的 *side_effect* ,否则它不会引发异常,并且当我设置 side_effect 时,我不会将 object.errno 作为返回值。
有没有办法让 Mock 引发异常,其中该异常对象具有errno属性设置?
将两个参数传递给 OSError 构造函数。 (第一个应该是errno
).
例如:
>>> OSError(2).errno
>>> OSError(2, 'message').errno
2
>>> OSError(2, 'message').strerror
'message'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)