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