Метод setUp
Метод setUp применяется в классах, наследуемых от TestCase, и выполняется автоматически перед каждым тестовым методом. Он предназначен для создания начальных данных, инициализации объектов и настройки состояния, необходимого для выполнения тестов. Метод не принимает аргументов и не возвращает значения.
Синтаксис
from django.test import TestCase
from myapp.models import Article
class ArticleTestCase(TestCase):
def setUp(self):
# Создание тестовых данных
Article.objects.create(title="article 1", status="published")
Article.objects.create(title="article 2", status="draft")
Пример
Давайте создадим тестовый набор для проверки методов модели Article. В методе setUp мы создадим несколько записей, которые будут использоваться в каждом тесте:
from django.test import TestCase
from myapp.models import Article
from datetime import date
class ArticleModelTest(TestCase):
def setUp(self):
# Создаем тестовые статьи
self.article1 = Article.objects.create(
title="article 1",
status="published",
created_at=date(2025, 1, 10)
)
self.article2 = Article.objects.create(
title="article 2",
status="draft",
created_at=date(2025, 1, 15)
)
self.article3 = Article.objects.create(
title="article 3",
status="published",
created_at=date(2025, 1, 20)
)
def test_published_articles_count(self):
# Проверяем количество опубликованных статей
published_count = Article.objects.filter(status="published").count()
self.assertEqual(published_count, 2)
def test_article_creation_date(self):
# Проверяем дату создания статьи
self.assertEqual(self.article1.created_at, date(2025, 1, 10))
Результат выполнения тестов:
"Running 2 tests in ArticleModelTest"
"test_published_articles_count - OK"
"test_article_creation_date - OK"
Пример
Рассмотрим пример использования setUp для подготовки данных с использованием связанных моделей. Создадим категорию и несколько статей, чтобы проверить методы работы с внешними ключами:
from django.test import TestCase
from myapp.models import Article, Category
class ArticleCategoryTest(TestCase):
def setUp(self):
# Создаем категорию
self.category = Category.objects.create(
name="Technology",
description="Articles about technology"
)
# Создаем статьи для категории
self.article1 = Article.objects.create(
title="article 1",
status="published",
category=self.category
)
self.article2 = Article.objects.create(
title="article 2",
status="published",
category=self.category
)
def test_category_articles(self):
# Проверяем связь категории со статьями
articles = self.category.article_set.all()
self.assertEqual(articles.count(), 2)
self.assertEqual(articles[0].title, "article 1")
def test_article_category(self):
# Проверяем связь статьи с категорией
self.assertEqual(self.article1.category.name, "Technology")
Результат выполнения тестов:
"Running 2 tests in ArticleCategoryTest"
"test_category_articles - OK"
"test_article_category - OK"
Пример
В этом примере продемонстрируем, как использовать setUp для создания множества тестовых записей с помощью цикла, что особенно полезно при необходимости большого количества тестовых данных:
from django.test import TestCase
from myapp.models import Article
class ArticleBulkTest(TestCase):
def setUp(self):
# Создаем множество тестовых статей с разными статусами
self.test_articles = []
for i in range(1, 6):
status = "published" if i % 2 == 0 else "draft"
article = Article.objects.create(
title=f"article {i}",
status=status,
views=i * 10
)
self.test_articles.append(article)
def test_published_articles(self):
# Проверяем, что количество опубликованных статей верное
published = Article.objects.filter(status="published")
self.assertEqual(published.count(), 2)
def test_total_views(self):
# Проверяем общее количество просмотров
total_views = sum(article.views for article in self.test_articles)
self.assertEqual(total_views, 150) # 10 + 20 + 30 + 40 + 50
Результат выполнения тестов:
"Running 2 tests in ArticleBulkTest"
"test_published_articles - OK"
"test_total_views - OK"
Смотрите также
-
метод
setUpTestData,
который создает данные один раз для всего класса тестов -
атрибут
client,
который предоставляет клиент для имитации запросов -
метод
assertContains,
который проверяет наличие содержимого в ответе -
метод
assertRedirects,
который проверяет перенаправление в ответе