Класс SimpleTestCase
Класс SimpleTestCase используется для создания простых тестов,
которые не требуют работы с базой данных. Этот класс
предоставляет множество вспомогательных методов для
проверки различных аспектов кода. Основное отличие
от TestCase заключается в том, что тесты
наследника не оборачиваются в транзакции базы данных,
что делает их быстрее для простых проверок.
Синтаксис
from django.test import SimpleTestCase
class MyTest(SimpleTestCase):
def test_something(self):
# тестовый код
self.assertEqual(1 + 1, 2)
Пример . Проверка строки
Давайте напишем тест для проверки строки:
from django.test import SimpleTestCase
class StringTest(SimpleTestCase):
def test_string_upper(self):
res = "hello".upper()
self.assertEqual(res, "HELLO")
def test_string_contains(self):
res = "Hello, World!"
self.assertIn("World", res)
Результат выполнения тестов:
"Running tests..."
".."
"OK"
Пример . Проверка исключений
Класс SimpleTestCase позволяет проверять выбрасывание
исключений в коде:
from django.test import SimpleTestCase
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
class ExceptionTest(SimpleTestCase):
def test_division_by_zero(self):
with self.assertRaises(ValueError):
divide(10, 0)
def test_division_success(self):
res = divide(10, 2)
self.assertEqual(res, 5)
Пример . Проверка HTML
SimpleTestCase содержит методы для проверки HTML-строк:
from django.test import SimpleTestCase
class HTMLTest(SimpleTestCase):
def test_html_contains(self):
html = "<div><p>Hello</p></div>"
self.assertInHTML("<p>Hello</p>", html)
def test_html_equal(self):
html1 = "<div><p>Test</p></div>"
html2 = "<div><p>Test</p></div>"
self.assertHTMLEqual(html1, html2)
Результат выполнения тестов:
"Running tests..."
".."
"OK"
Пример . Проверка JSON
Для работы с JSON-данными в SimpleTestCase есть
специальные методы:
from django.test import SimpleTestCase
class JSONTest(SimpleTestCase):
def test_json_equal(self):
json1 = '{"name": "John", "age": 30}'
json2 = '{"age": 30, "name": "John"}'
self.assertJSONEqual(json1, json2)
def test_json_not_equal(self):
json1 = '{"name": "John", "age": 30}'
json2 = '{"name": "John", "age": 31}'
self.assertJSONNotEqual(json1, json2)
Результат выполнения тестов:
"Running tests..."
".."
"OK"
Пример . Использование метода setUp
Метод setUp выполняется перед каждым тестом и используется
для подготовки данных:
from django.test import SimpleTestCase
class SetupTest(SimpleTestCase):
def setUp(self):
self.data = [1, 2, 3, 4, 5]
self.name = "Django"
def test_data_length(self):
self.assertEqual(len(self.data), 5)
def test_name_upper(self):
res = self.name.upper()
self.assertEqual(res, "DJANGO")
Смотрите также
-
класс
TestCase,
который использует транзакции для изоляции тестов -
класс
TransactionTestCase,
который полностью пересоздает базу данных перед каждым тестом -
класс
LiveServerTestCase,
который запускает тестовый сервер для интеграционных тестов -
декоратор
override_settings,
который позволяет временно изменять настройки