使用Python 2.6 unittest捕获响应代码

使用Python 2.6 unittest捕获响应代码,python,unit-testing,Python,Unit Testing,使用unittest使用API测试某些边缘情况。所有这些情况都使用自定义异常类返回400系列响应代码。不幸的是,我似乎找不到捕获这些自定义异常或读取unittest检查本身中的响应代码的方法 我收到的是一个“AppError”异常,其中有一条消息提到它是400响应,而不是200或300响应。如果可以,我希望避免解析异常消息。这也需要在Python2.6+上工作。如何在unittest检查中捕获自定义异常,或者在不解析异常消息的情况下确定导致错误的响应代码?您必须捕获异常并断言它不是400响应:

使用unittest使用API测试某些边缘情况。所有这些情况都使用自定义异常类返回400系列响应代码。不幸的是,我似乎找不到捕获这些自定义异常或读取unittest检查本身中的响应代码的方法


我收到的是一个“AppError”异常,其中有一条消息提到它是400响应,而不是200或300响应。如果可以,我希望避免解析异常消息。这也需要在Python2.6+上工作。如何在unittest检查中捕获自定义异常,或者在不解析异常消息的情况下确定导致错误的响应代码?

您必须捕获异常并断言它不是400响应:

try:
    call_api_method()
except AppError as ae:
    self.assert(ae.errorcode < 400)
试试看:
调用api方法()
除作为ae出现的情况外:
自断言(ae.errorcode<400)

这要求异常将错误代码作为属性携带;您可能需要检查异常上有哪些属性可用。默认情况下,
.args
将在那里(它是一个元组),但是对于这样的异常,最好也有一个error code属性。

我知道了如何做。事实证明,使用webtest(我忘了提到它正在使用),您可以传入一个参数
expect\u errors=True
,并保存请求的返回值。然后,您可以使用

self.assertEqual('400 Bad Request', response.status)

不幸的是,这个错误似乎没有任何有用的属性。不过,我确实设法弄明白了怎么做。@paradox870:听到这个消息我很难过;如果异常只提供一个字符串消息,那么除了解析它之外,您别无选择。否则,我希望能有所帮助。是的,我只是把我的结果作为另一个答案发布了。不过谢谢你的建议。@paradox870:好的,如果你把使用
webtest
的事实包括在内,那会有所帮助的-P