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

Введение PHP: Автоматическое тестирование

Код профессиональных разработчиков содержит меньше ошибок, чем код новичков. Это происходит не потому, что опытные программисты умнее, внимательнее к деталям или видят код насквозь. Настоящая причина в том, что они пишут тесты.

Автоматизированное тестирование — это неотъемлемая часть программирования в профессиональной среде. Тесты — это единственный надежный способ убедиться в работоспособности кода. Они не избавляют от багов, но позволяют держать их количество на приемлемом уровне. Тесты дают уверенность, что изменения в одной части системы не сломали другие части.

Однако тесты нужны не только для проверки работоспособности кода. Существуют и другие виды автоматизированных тестов — например, тесты производительности или тесты на уязвимости.

Среди разных видов автоматизированных тестов программисты в первую очередь отвечают за функциональные тесты. Эти тесты проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы. Например, тесты регистрации пользователей должны показывать, что программа действительно регистрирует пользователей.

По степени изолированности тестируемых частей кода функциональные тесты принято делить на:

  • Модульные
  • Интеграционные
  • Системные

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

Самые сложные и максимально эффективные — это системные тесты. В случае сайтов это тестирование через браузер. Эти тесты эмулируют поведение настоящего пользователя, ходят по сайту, кликают на ссылки, заполняют и отправляют формы. Сложность этих тестов в том, что им приходится опираться на верстку сайта, которая часто и непредсказуемо меняется. Кроме того, в браузере программа не может точно определить, когда закончилось одно действие и началось другое. Именно поэтому такие тесты часто ломаются, их сложно писать и поддерживать.

Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы и инструменты. Этот курс познакомит вас с общими принципами тестирования и шаг за шагом проведет через все задачи, возникающие во время тестирования. Основные темы этого курса:

  • Утверждения (Asserts)
  • Фреймворки для тестирования (PHPUnit)
  • Модульное тестирование (Unit)
  • Покрытие кода тестами
  • Разработка через тестирование (TDD)

Как мы тестируем тесты в данном курсе

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

Алгоритм решения практик в этом курсе:

  1. Изучить задание, ожидаемую логику работы функции
  2. Определить, как протестировать предоставленные реализации
  3. Дополнить тесты, чтобы они:
    • обнаруживали ошибки, допущенные в неправильных реализациях
    • успешно проходили для корректной реализации

Запущенные тесты сообщают о результате проверки:

  • Успешно:

    • "Expected tests to fail, received tests failed" - тесты обнаружили ошибку в некорректной реализации
    • "Expected tests to pass, received tests passed" - тесты успешно прошли для корректной реализации
  • Ошибка:

    • "Expected tests to pass, but error occurred. See output above." - тесты "упали" на корректной реализации
    • "Expected tests to fail, but they passed. See output above." - тесты прошли на ошибочной реализации

Технически проверка упражнений в данном курсе реализована с помощью утилиты Supressor, которая запускает тесты с разными реализациями. Более детальную информацию о том, как мы тестируем тесты в данном курсе, вы можете почитать в этой статье.


Дополнительные материалы

  1. Как мы тестируем тесты. О проверке тестов в практических упражнениях этого курса.

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

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

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

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

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

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

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

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

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

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