Ответ
В 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).