Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Подготовка данных Python: Автоматическое тестирование

Большинство тестов на одну и ту же функциональность сильно похожи друг на друга, особенно в части начальной подготовки данных. В прошлом уроке каждый тест начинался со строчки: stack = []. Это еще не дублирование, но уже шаг в опасную сторону. В этом уроке мы поговорим о том, как избегать дублирования при подготовке одинаковых данных для разных тестов.

Допустим, мы разрабатываем библиотеку funcy, которая предоставляет функции для работы с коллекциями в Python. Среди них есть такие функции:

  • compact
  • select
  • flatten

Как их протестировать? Для работы этих функций нужна заранее подготовленная коллекция. Создаем нужную коллекцию, передаем ее в тестируемую функцию, смотрим результат:

def test_compact():
    # Подготовим коллекцию coll
    coll = ['One', True, 3, [1, 'hexlet', [0]], 'cat', {}, '', [], False]

    # Используем coll для тестирования
    result = compact(coll)
    assert result == # тут ожидаемое значение

Затем то же самое делаем для всех остальных функций:

def test_select():
    # Точно такая же коллекция, получилось дублирование
    coll = ['One', True, 3, [1, 'hexlet', [0]], 'cat', {}, '', [], False]

    # Используем coll для тестирования
    result = select(coll)
    assert result == # тут ожидаемое значение

Затем проделываем эту операцию для всех остальных тестируемых функций. Код инициализации коллекции начнет кочевать из одного места в другое, порождая все больше и больше одинакового кода.

Самый простой способ избежать этого — вынести определение коллекции на уровень модуля:

# Создание коллекции теперь описано в одном месте сразу для всех функций
coll = ['One', True, 3, [1, 'hexlet', [0]], 'cat', {}, '', [], False]

def test_compact():

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 21 сентября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»