Python self.assertRaises

标签 python unit-testing python-unittest assertraises

我有一个小代码如下,请帮助我如何以正确的方式编写它。我想检查 ID 是否存在于 value 中,如果不存在则引发异常。

value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})

with self.assertRaises(IndexError, value[0]["ID"]):
    print "not an error"

最佳答案

您的代码的问题是 value[0]["ID"] 只是一个任意参数,在 Python 中参数在执行函数调用之前被评估。所以在你的情况下 assertRaises 没有机会拦截错误,因为它没有被调用。

我猜你正在寻找这个片段,如果你想坚持使用基于上下文管理器的方法,这在你需要一次评估语​​句或多个表达式的情况下很有用:

with self.assertRaises(IndexError):
    value[0]["ID"]

如果您需要解析单个表达式(语句在 lambda 中不起作用),您也可以这样工作:

self.assertRaises(IndexError, lambda: value[0]["ID"])

有关这方面的更多信息,请查看 this question ,因为它似乎解决了您关于如何正确使用 assertRaises 的问题。

另请注意,在您的情况下,value 只是字典,而不是元组,尽管有括号 — 为了制作 value 单元素元组,请使用 foo = (bar, ) 语法——需要尾随逗号来区分优先级覆盖括号,如 (2 + 2) * 3

此外,在单元测试中,您通常不需要输出任何与断言状态相关的信息——无论它通过还是失败,单元测试框架的工作就是形成适当的报告。但是,如果您无论如何都愿意打印它,只需在您的断言之后包含 print() — 因为如果断言失败,测试将停止运行,并且控制将无法到达您的 print().

关于Python self.assertRaises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056179/

相关文章:

python - 如何使用 moto @mock_dynamodb2 模拟失败的操作?

python - 我应该如何从电路框架内获取其他 URL?

python - pycharm 的 pycallgraph 不起作用

python - 与 Vampire Numbers 列表比较失败

python - 单元测试发现测试根目录时出现 ImportError

Python unittest 仅跳过一个子类的测试

python - 当多维形状是列表时,Numba 函数中的 NumPy 零不起作用

c# - 我如何在需要时测试实现是同步的还是异步的?

python-3.x - python中的单元测试 - 在测试中创建数据帧

asp.net - 调用 VirtualPathUtility.ToAbsolute 的单元测试代码