Вопрос проверяет знание распространённых инструментов тестирования в экосистеме Python.
На практике чаще всего используют pytest и unittest. Для моков применяют unittest.mock. Для генерации тестовых данных используется hypothesis. pytest популярен из-за простоты и удобных фикстур.
В Python существует несколько основных инструментов тестирования.
Самый распространённый инструмент.
Основные возможности:
Простая запись тестов
Фикстуры
Плагины
Параметризация
Пример:
def test_sum():
assert 1 + 1 == 2
Стандартная библиотека Python.
Особенности:
Классы тестов
Структура похожа на JUnit
Пример:
import unittest
class TestMath(unittest.TestCase):
def test_sum(self):
self.assertEqual(1 + 1, 2)
Используется для имитации зависимостей.
Применяется:
Для API
Для БД
Для внешних сервисов
Определение:
Property-based testing — подход, при котором тесты генерируют множество входных данных автоматически.
Пример:
from hypothesis import given
from hypothesis import strategies as st
@given(st.integers())
def test_abs(x):
assert abs(x) >= 0
Это помогает находить неожиданные ошибки.
Часто используются:
pytest-cov — покрытие тестами
factory-boy — генерация объектов
В большинстве проектов основной инструмент — pytest, а unittest.mock и hypothesis используются как дополнение.