python - 如何使用 Pytest 测试错误消息
问题描述
我想找到一种方法来测试我的代码是否使用 pytest 针对给定错误返回正确的错误消息
我的代码适用于字典,在某些情况下,某些键可能未定义。在下面的示例中,tag
变量由用户提供,在某些情况下,该键可以是未定义的。然后我添加了一个 try/except 语句来捕获这个异常并向用户返回一条错误消息,解释问题。
try:
species = self.species[tag]
except KeyError:
print(f"Error: the species {tag} is not defined")
尝试为此代码编写单元测试时出现我的问题。如何检查我的代码是否返回适当的错误消息?我可以编写一个自愿提供错误的测试,tag
然后检查标准输出,但是如果我决定更改错误消息,我将不得不重写这个测试。在“不要重复自己”的方法中似乎不太合适。
这:如何正确断言在 pytest 中引发了异常?没有回答我的问题,因为我没有提出例外。
也许我什至一开始都没有正确处理错误,并且有更好的方法来使用 Python。
解决方案
我相信你应该改变你的代码结构来实现你想要的。
class Species:
def myMethod(tag):
try:
species = self.species[tag]
except KeyError:
raise YourCustomError(f"Error: the species {tag} is not defined")
然后,您可以编写 pytest 函数来检查在使用带有错误标签的 myMethod 时是否引发了 YourCustomError。请注意,您可以执行以下操作,而不是 YourCustomError:raise KeyError("custom message")
推荐阅读
- node.js - 如果指定了 ID 和分区键值,则 CosmosClient read() 仅返回对象
- react-native - 使用 pubnub-react 时,对象不是 React Native 中的构造函数
- javascript - 通过表达式直接在 HTML 中过滤对象数组
- javascript - 使用 websocket 绘制折线图
- vue.js - 防止“离开网站?” iframe 内的 Google 表单对话框?
- dart - 'List 类型的值
无法从函数“fetchCountries”返回,因为它的返回类型为“Future” ' - python - 如何对数据集进行计算?
- javascript - 根据选择标签选项填写表格
- c# - 执行查询时窗体冻结
- python - 如何在 SqlAlchemy / Mysql 中存储时区感知日期时间值?