Класс SimpleTestCase

Класс SimpleTestCase используется для создания простых тестов, которые не требуют работы с базой данных. Этот класс предоставляет множество вспомогательных методов для проверки различных аспектов кода. Основное отличие от TestCase заключается в том, что тесты наследника не оборачиваются в транзакции базы данных, что делает их быстрее для простых проверок.

Синтаксис

pythonfrom django.test import SimpleTestCase

class MyTest(SimpleTestCase):
  def test_something(self):
    # тестовый код
    self.assertEqual(1 + 1, 2)

Пример . Проверка строки

Давайте напишем тест для проверки строки:

pythonfrom 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)

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

python"Running tests..."
".."
"OK"

Пример . Проверка исключений

Класс SimpleTestCase позволяет проверять выбрасывание исключений в коде:

pythonfrom 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-строк:

pythonfrom 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)

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

python"Running tests..."
".."
"OK"

Пример . Проверка JSON

Для работы с JSON-данными в SimpleTestCase есть специальные методы:

pythonfrom 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)

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

python"Running tests..."
".."
"OK"

Пример . Использование метода setUp

Метод setUp выполняется перед каждым тестом и используется для подготовки данных:

pythonfrom 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,
    который позволяет временно изменять настройки