РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
756 of 818 menu

Класс TestCase

Класс TestCase является базовым классом для написания тестов в Django. Он наследуется от стандартного unittest.TestCase из Python и добавляет специфические для Django возможности, такие как работа с базой данных, тестовый клиент и проверка шаблонов. Каждый тест в классе выполняется в изолированной транзакции, которая откатывается после завершения теста, что обеспечивает чистоту данных между тестами. Основные аргументы передаются через методы и атрибуты класса.

Синтаксис

from django.test import TestCase class MyTestCase(TestCase): @classmethod def setUpTestData(cls): # Создание данных для всех тестов pass def setUp(self): # Подготовка перед каждым тестом pass def test_something(self): # Тест pass

Пример

Создадим простой тест для модели Article:

from django.test import TestCase from myapp.models import Article class ArticleTestCase(TestCase): @classmethod def setUpTestData(cls): # Создаем тестовую статью Article.objects.create(title="article", status="published") def test_article_creation(self): article = Article.objects.get(title="article") self.assertEqual(article.status, "published") def test_article_count(self): count = Article.objects.count() self.assertEqual(count, 1)

Результат выполнения кода:

"All tests passed"

Пример

Используем тестовый клиент для проверки представления:

from django.test import TestCase from django.urls import reverse from myapp.models import Article class ViewTestCase(TestCase): @classmethod def setUpTestData(cls): Article.objects.create(title="article", status="published") def test_article_list_view(self): response = self.client.get(reverse('article_list')) self.assertEqual(response.status_code, 200) self.assertContains(response, "article") self.assertTemplateUsed(response, 'article_list.html')

Результат выполнения кода:

"All tests passed"

Пример

Используем методы для проверки количества запросов к базе данных:

from django.test import TestCase from myapp.models import Article class QueryTestCase(TestCase): @classmethod def setUpTestData(cls): for i in range(10): Article.objects.create(title=f"article {i}", status="published") def test_query_count(self): with self.assertNumQueries(1): articles = Article.objects.all() self.assertEqual(len(articles), 10)

Результат выполнения кода:

"All tests passed"

Смотрите также

  • класс SimpleTestCase,
    который используется для тестов без базы данных
  • класс TransactionTestCase,
    который используется для тестов с транзакциями
  • метод setUpTestData,
    который создает данные для всех тестов
  • метод setUp,
    который подготавливает данные перед каждым тестом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить