如何在单元测试中处理django中抛出手动异常的视图?

时间:2017-02-19 09:09:03

标签: python django unit-testing django-unittest

我已经制作了一个django应用程序并正在为它编写测试。 在我的一个观点中,我手动抛出异常:

raise Http404('Not authorised')

使用django的内置测试框架(基于unittest)编写测试时。

TL; DR:有没有办法编写测试,以确保视图确实返回Http404。 (assertEqual(response.status_code, 404不起作用)

2 个答案:

答案 0 :(得分:0)

这应该有效:

resp = self.client.get(url)
self.assertEqual(resp.status_code, 404)

通过以下方式运行测试:

python manage.py test

如果没有,请重新检查您的代码并提供错误消息。

答案 1 :(得分:0)

如果self.assertEqual不起作用,您可以尝试使用with标签,如下所示 assertRaises(exception, callable, *args, **kwds)

with self.assertRaises(Http404):
    // your logic here

例如。我有一个可以返回订单或引发HTTP 404响应的函数

from django.http import Http404

def test_get_order_with_method_404(self):
    client = MyPaymentClient("super_secret_key")
    with self.assertRaises(Http404):
        client.get_order_with_method("payment_id", "payment_method")

您也可以使用get_object_or_404

示例:

from django.http import Http404
from django.shortcuts import get_object_or_404

with self.assertRaises(Http404):
    get_object_or_404(MyModel, some_argument="MyCriteria")

好吧,我想你明白了。希望这对您有所帮助!