Ответ
Django включает мощный фреймворк для тестирования, построенный на основе стандартной библиотеки Python unittest. Основной подход — написание тестов, которые выполняются в изолированном окружении с отдельной тестовой базой данных.
Ключевые компоненты и инструменты:
-
django.test.TestCaseЭто основной класс для написания тестов. Его ключевая особенность — каждый тестовый метод выполняется внутри отдельной транзакции базы данных, которая откатывается по завершении. Это обеспечивает полную изоляцию тестов друг от друга. -
Test Client (
self.client) Экземплярdjango.test.Clientдоступен вTestCaseкакself.client. Он позволяет симулировать HTTP-запросы (GET, POST и др.) к вашему приложению, чтобы тестировать views, URL-маршрутизацию и весь request-response цикл.from django.test import TestCase from django.urls import reverse class MyViewTest(TestCase): def test_home_page_status_code(self): # Выполняем GET-запрос к главной странице по её имени в URL-конфигурации response = self.client.get(reverse('home')) self.assertEqual(response.status_code, 200) -
RequestFactoryБолее низкоуровневый инструмент, чем Test Client. Он создает объект запроса (HttpRequest), который можно передать в view-функцию напрямую. Это полезно для юнит-тестирования логики view, минуя весь стек middleware и обработку URL. -
Специализированные Assertions Django расширяет стандартные
unittestassertions методами, специфичными для веба:assertContains(response, text): Проверяет, содержит ли ответ указанный текст.assertRedirects(response, url): Проверяет, что ответ является редиректом на указанный URL.assertFormError(...): Проверяет наличие ошибок в форме.
Популярная альтернатива:
- Pytest с плагином
pytest-djangoчасто используется вместо встроенного test runner'а. Он предлагает более лаконичный синтаксис для написания тестов и мощную систему фикстур.