use*_*126 1 python unit-testing assertraises python-unittest
我有一个如下的小代码,请帮助我以正确的方式写这个.我想检查ID是否存在value,如果不存在则会引发异常.
value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
with self.assertRaises(IndexError, value[0]["ID"]):
print "not an error"
Run Code Online (Sandbox Code Playgroud)
您的代码问题是它value[0]["ID"]只是一个任意参数,并且在执行函数调用之前会对Python参数进行求值.所以在你的情况下assertRaises没有机会拦截错误,因为它没有被调用.
如果您希望坚持使用基于上下文管理器的方法,我想您正在寻找这个片段,这在您需要一次评估语句或多个表达式时非常有用:
with self.assertRaises(IndexError):
value[0]["ID"]
Run Code Online (Sandbox Code Playgroud)
或者你可以这样工作,如果你需要解析单个表达式(语句在lambdas中不起作用):
self.assertRaises(IndexError, lambda: value[0]["ID"])
Run Code Online (Sandbox Code Playgroud)
有关此问题的其他信息,请查看此问题,因为它似乎解决了有关如何正确使用的问题assertRaises.
另请注意,在你的情况下value只是dict,而不是元组,尽管有括号 - 为了制作value单元素元组,使用foo = (bar, )语法 - 需要尾随昏迷来区分优先级覆盖括号,例如(2 + 2) * 3.
同样在单元测试中,您通常不需要输出与断言状态相关的任何内容 - 如果它通过或未通过单元测试框架的工作以形成适当的报告.但是如果你还是愿意打印它,只需print()在你的断言之后加入 - 因为如果断言失败,测试就会停止运行,并且控制将无法到达你的print().
| 归档时间: |
|
| 查看次数: |
4504 次 |
| 最近记录: |