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

Метод setUpTestData

Метод setUpTestData применяется в классе TestCase для создания тестовых данных, которые будут использоваться во всех тестовых методах класса. Данные создаются один раз при инициализации класса и сохраняются в базе данных на время выполнения всех тестов. Метод должен быть объявлен как классовый метод с декоратором @classmethod.

Синтаксис

from django.test import TestCase class MyTestCase(TestCase): @classmethod def setUpTestData(cls): # Создание тестовых данных cls.object = MyModel.objects.create(...)

Пример

Давайте создадим тестовые данные для модели Article:

from django.test import TestCase from myapp.models import Article class ArticleTestCase(TestCase): @classmethod def setUpTestData(cls): cls.article1 = Article.objects.create( title="First article", status="published", views=100 ) cls.article2 = Article.objects.create( title="Second article", status="draft", views=50 ) def test_published_articles(self): published = Article.objects.filter(status="published") self.assertEqual(published.count(), 1) self.assertEqual(published.first().title, "First article") def test_article_views(self): self.assertEqual(self.article1.views, 100) self.assertEqual(self.article2.views, 50)

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

"All tests passed successfully"

Пример

Давайте создадим тестовые данные со связями между моделями:

from django.test import TestCase from myapp.models import Category, Article class ArticleCategoryTestCase(TestCase): @classmethod def setUpTestData(cls): cls.category = Category.objects.create( name="Technology", slug="tech" ) cls.article = Article.objects.create( title="Tech article", status="published", category=cls.category, views=200 ) def test_article_category(self): self.assertEqual(self.article.category.name, "Technology") self.assertEqual(self.category.article_set.count(), 1) def test_category_slug(self): self.assertEqual(self.category.slug, "tech")

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

"All tests passed successfully"

Пример

Давайте создадим тестовые данные с использованием bulk_create для повышения производительности:

from django.test import TestCase from myapp.models import Article class BulkArticleTestCase(TestCase): @classmethod def setUpTestData(cls): articles = [ Article(title="Article 1", status="published", views=10), Article(title="Article 2", status="draft", views=20), Article(title="Article 3", status="published", views=30), ] cls.articles = Article.objects.bulk_create(articles) def test_total_articles(self): self.assertEqual(Article.objects.count(), 3) def test_published_count(self): published = Article.objects.filter(status="published") self.assertEqual(published.count(), 2) def test_avg_views(self): avg_views = Article.objects.aggregate(avg_views=Avg("views")) self.assertEqual(avg_views["avg_views"], 20)

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

"All tests passed successfully"

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

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