【发布时间】:2016-05-31 10:21:56
【问题描述】:
我正在对 API 进行代码审查,并在单元测试中发现了这一点。测试通过了,但我不明白为什么。
class SomeTestCase(TestCase):
def setUp(self):
self.client = Client()
@mock.patch("patch.a.thing", mock_function)
def test_fail(self):
request_data = {
"some": "bad data"
}
response = self.client.post(
"/path/to/api",
json.dumps(request_data),
content_type="application/json",
HTTP_HEADERNAME=HEADER_VALUE
)
self.assertRaises(Exception, response)
当我们传入错误数据时,我们预计 API 会出现 500 个状态代码。即使调用 API 会导致异常,在 client.post 将单元测试封装为错误期间不会引发异常吗? response 不是可调用的,因此将其传递给 assertRaises 是错误的,但是我希望看到的行为是 assertRaises 没有出现异常,因此单元测试失败。谁能解释它为什么会这样?
编辑:
我刚刚测试了这个,这个单元测试也通过了:
class ThingTestCase(TestCase):
def test_thing_fails(self):
x = True
y = False
z = {"some": "thing"}
self.assertRaises(Exception, x)
self.assertRaises(Exception, y)
self.assertRaises(Exception, z)
self.assertRaises(Exception)
【问题讨论】:
-
由于您在断言之前调用
response = self.client.post(...),看起来这并没有引发预期的异常。这表明您的猴子补丁不起作用。
标签: python django python-2.7 unit-testing