Метод 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,
который проверяет количество выполненных запросов