Какие основные инструменты и подходы используются для написания тестов в Python?

Ответ

В Python для написания тестов в основном используются два фреймворка: встроенный модуль unittest и более современная и популярная сторонняя библиотека pytest.

1. unittest

Стандартный, встроенный в Python фреймворк, основанный на концепции xUnit. Требует более явного, объектно-ориентированного синтаксиса.

Ключевые особенности:

  • Тесты организуются в классы, наследуемые от unittest.TestCase.
  • Тестовые методы должны начинаться с префикса test_.
  • Используются специальные assert методы: self.assertEqual(), self.assertTrue(), self.assertRaises().

Пример:

import unittest

def add(a, b):
    return a + b

class TestMathFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)

if __name__ == '__main__':
    unittest.main()

2. pytest

Популярный фреймворк, известный своим лаконичным синтаксисом, мощной системой фикстур и большим количеством плагинов.

Ключевые особенности:

  • Тесты — это обычные функции с префиксом test_.
  • Использует стандартный оператор assert, что делает код более читаемым и коротким.
  • Мощная система фикстур для подготовки и очистки тестового окружения (например, подключение к БД).
  • Автоматическое обнаружение тестов.

Пример:

# test_math.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

# Запуск из командной строки: pytest

Основные принципы тестирования:

  • Изоляция: Тесты не должны зависеть друг от друга.
  • Воспроизводимость: Тест должен давать одинаковый результат при каждом запуске.
  • Использование моков (mocks): Для изоляции от внешних систем (БД, API) используются мок-объекты (например, с помощью unittest.mock).