我的Web应用程序的urls.py如下

urlpatterns = [
    path('u/<int:unit_id>/', views.unit_view, name='unit_view'),
    path('u/<int:unit_id>/edit/', views.unit_edit, name='unit_edit'),
]


我试图写测试如下。无法运行测试。连错误都没有

from django.urls import reverse, resolve


class TestUrls:

    def test_unit_view_url(self):
        path = reverse('unit_view', kwargs={'unit_id': 1})
        assert resolve(path).views.unit_view == 'unit_view'

    def test_unit_edit_url(self):
        path = reverse('unit_edit', kwargs={'unit_id': 1})
        assert resolve(path).views.unit_edit == 'unit_edit'

最佳答案

您没有从TestCase继承子类,因此对于Django来说,这只是一个普通类。

from django.test import TestCase
from django.urls import reverse, resolve

class TestUrls(TestCase):

    def test_unit_view_url(self):
        path = reverse('unit_view', kwargs={'unit_id': 1})
        self.assertEqual('unit_view', resolve(path).views.unit_view)

    def test_unit_edit_url(self):
        path = reverse('unit_edit', kwargs={'unit_id': 1})
        self.assertEqual('unit_edit', resolve(path).views.unit_view)


通常,断言还会与assertEqual(..) [Python-doc]和朋友一起编写,因为这会产生有用的消息,例如:

AssertionError: 'foobar' != 'foobor'
- foobar
?     ^
+ foobor
?     ^


因此,测试将打印出这两个值,并且-取决于类型和断言-甚至可以提供更多有关发生问题的信息。

有关更多信息,请参见Django documentation on Writing and running tests

09-11 18:24