Joh*_*n C 9 python unit-testing mocking
鉴于此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})
Run Code Online (Sandbox Code Playgroud)
我想测试所有可能的路径,包括异常处理.使用Mock,很容易引发异常,我使用此代码:
with patch('os.remove', new=Mock(side_effect=OSError(errno.ENOENT))):
self.assertRaises(OSError, self.app.delete, file_URL) # broken
Run Code Online (Sandbox Code Playgroud)
模拟引发异常,其打印值为2(ENOENT) - 但e.errno设置为NONE.到目前为止,我还没有找到一种方法来设置它.结果是,异常总是被重新引发,我的单元测试中从未到达最后一行代码.
我也尝试使用errno set创建一个虚拟类,然后返回它.但除非它有*side_effect*设置为调用,否则它不会引发异常,当我设置side_effect时,我不会将object.errno作为返回值.
有没有办法让Mock引发一个Exception,那个Exception对象是否设置了errno属性?
将两个参数传递给OSError构造函数.(第一个应该是errno).
例如:
>>> OSError(2).errno
>>> OSError(2, 'message').errno
2
>>> OSError(2, 'message').strerror
'message'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4451 次 |
| 最近记录: |