Подтвердить что ты не робот

Тестирование Django - URL-адрес жесткого кода или нет

Это вопрос наилучшей практики.

При написании тестов в Django лучше ли жестко указывать URL-адреса в файле tests.py или использовать функцию обратного вызова() для получения правильного URL-адреса?

Использование жестко запрограммированных URL-адресов для тестирования только чувствует как правильный путь, но в то же время я не могу придумать достаточно хороший аргумент, чтобы не использовать reverse().

Опция A. reverse()

# Data has already been loaded through a fixture
def test_view_blog(self):
    url = reverse('blog', kwargs={'blog_slug':'test-blog'})
    response = self.client.get(url)
    self.failUnlessEqual(response.status_code, 200)

Вариант B. жестко закодированный

# Data has already been loaded through a fixture
def test_view_blog(self):
    url = '/blog/test-blog/'
    response = self.client.get(url)
    self.failUnlessEqual(response.status_code, 200)
4b9b3361

Ответ 1

Недавно я начал использовать Twill через django-test-utils до unit test некоторых из моих работ Django.

Вместо хардкодирования URL-адресов и/или с использованием reverse я использую такие вещи, как twill.follow('Blog') (чтобы перейти по ссылке "Блог" на странице).

Это позволяет вам действительно проверять поведение вашего веб-сайта, точно так же, как это видит веб-браузер, и может поймать то, что другие методы не могут. Например, это не удастся, если вы случайно удалили ссылку "Блог" со своих навигационных ссылок.

Ответ 2

Я бы рекомендовал использовать "Option A. reverse()", потому что он позволяет отделить ваш тест от местоположения, на котором монтируется вид.

например, если '/blog/test-blog/' станет '/blog/test-better-url-blog/' для теста по-прежнему будет уместным.

Ответ 3

Лучше использовать обратную функцию, чтобы получить URL-адреса по именам. Это не только проверяет ваши взгляды, но также гарантирует, что ваши имена имен сохраняются одинаково.

Смотрите это как внутреннее тестирование API. Вы узнали бы, если некоторые из ваших URL-адресов сломаны, и вам напомнят об обновлении тэгов {% url%} в шаблонах.

Ответ 4

Почему бы не сделать как twill.follow('Blog'), так и reverse()?