python - pytest.raises 失败:没有使用 try/except 引发
问题描述
当使用 pytest.raises 测试由 try/except 块捕获的错误时,由于没有引发它而失败。
如果我使用 dict 查找做了一个简单的测试,并且没有在它周围放置 try/except,那么 pytest.raises 测试通过。但是如果使用 try/except ,测试会失败。
这是有效的:
def lookup_value(key):
lookup = {'A': 1, 'B': 2}
return lookup[key]
def test_lookup():
with pytest.raises(KeyError):
lookup_value('C')
现在添加try/except:
def lookup_value(key):
lookup = {'A': 1, 'B': 2}
try:
return lookup[key]
except KeyError as err:
print(err)
def test_lookup():
with pytest.raises(KeyError):
lookup_value('C')
第一个片段,测试通过。第二个片段,我得到“失败:没有提高<class 'KeyError'
>”
解决方案
这里的代码正在吞噬异常(捕获它而不传播发生异常的事实)。
try:
return lookup[key]
except KeyError as err:
print(err)
您只需要重新引发异常,以便pytest.raises
看到它
try:
return lookup[key]
except KeyError as err:
print(err)
raise
return
此外,在函数末尾省略一条返回另一个代码路径中的内容的语句通常是不好的做法。在 Python 中有一个隐含return None
但为什么不通过显式编写来帮助读者一点。
推荐阅读
- angular - 如何以角度为子组件的子组件指定路由?
- db2 - DB2 on Cloud 中的高可用性特性
- laravel - 列的工厂相同 ID,自动增量,Laravel
- primefaces - 如何使用 ap:dataTable 和 p:columnGroup 标题使用 p:columns
- talend - 使用 Talend 从 Google Drive 读取文件
- r - 从 R 中的数值列向量创建一个因子
- c# - 为 MainWindow 生成别名
- c - C中的无符号整数环绕处理
- javascript - 删除顶点后,在 mxgraph 中的相邻顶点之间创建一条边
- git - (Git)当您在当前分支中有大量更改时,将修复提交到不同分支的最实用方法是什么?