Модульное тестирование (PHP Codeception)

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

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

История

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

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

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

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

Модульное тестирование

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

В качестве простого примера можно привести примитивную функцию, которая математически складывает два переданных ей аргумента:

function sum(x, y) {
    return x + y;
}

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

$result = sum(2, 2);

Мы ожидаем, что значение переменной $result будет равняться 4. А если результат будет равняться не 4, а например 5? Это будет означать, что функция работает не правильно. Чтобы быть убежденным в том, что функция исправна, мы можем написать на нее тест, или по другому говоря осуществить покрытие функции тестом. Мануально это может выглядеть следующим образом

assert(sum(2, 2) === 4);

Таким образом мы произвели сверку результата функции суммы двух чисел с ожидаемым результатом. Это позволит нам быть уверенными в том, что функция работает верно. Если кто - либо из группы разработки ПО внесет изменения в функцию sum() и она перестанет работать должным образом, запуск написанного нами теста выявит проблему и мы на ранней стадии успеем ее исправить.

Преимущества

Таким образом покрыв основные компоненты системы модульными тестами, мы можем быть в большей степени уверенными, что наша система работает верно и производить рефакторинг кода приложения будет уже не столько болезненной задачей, так как изменив код, мы можем прогнать набор тестов и убедиться в том, что ничего не сломалось

Модульные тесты можно рассматривать как документацию для тестируемого класса. Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в качестве примера.

Codeception

Codeception - это PHP фреймворк, который позволяет производить тестирование программных систем. При помощи Codeception можно писать модульные, функциональные и приемочные тесты, а также осуществлять тестирование API.

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

Установка

Для того, чтобы установить инструмент глобально в ОС Linux необходимо загрузить codeception и переместить его в локальную bin директорию при помощи следующей команды:

curl -LsS https://codeception.com/codecept.phar -o /usr/local/bin/codecept

И выставить права на исполнение

chmod a+x /usr/local/bin/codecept

Готово. Чтобы убедиться, что инструмент был интегрирован в систему, выполните следующую команду

codecept

Отобразится информация о версии инструмента, а также перечень команд по использованию фреймворка

Selection_042_2_800x600.png

Инициализация

Для того, чтобы начать использовать инструмент, нужно произвести инициализацию. Перейдите в папку с потенциальным проектом, в примере эта пустая директория, и выполните следующую команду:

codecept bootstrap

После выполнения этой команды будет создан конфигурационный файл “codeception.yml” и директория “tests” в котором будет храниться тестовый набор по умолчанию

Selection_043_800x600.png

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

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

Написание теста

Давайте создадим файл, содержащий функцию суммирования двух чисел и назовем его “sum.php”

function sum($x, $y) {
    return $x + $y;
}

Теперь можно приступить к написанию теста на эту функцию. Сгенерируем шаблон модульного теста при помощи следующей команды:

codecept generate:cest unit Sum

Как результат мы получим созданный в директории “tests/unit/SumCest.php” файл для написания теста. Откроем его и напишем тест

Selection_045_800x600.png

В методах “_before” и “_after” можно произвести некоторую инициализацию или общие подготовительные настройки. Данные методы выполняются перед запуском каждого описанного теста в классе

  • В третьей строке подключается ранее написанная функция
  • В пятнадцатой строке декларируется метод, тело которого содержит непосредственно проверку функции
  • В 17 строке мы используем метод “assertEquals”, который принимает два аргумента - ожидаемое значение и реальное. Первый аргумент - это ожидаемый результат, т.е. цифра 4. В качестве реального значения мы подставляем результат функции “sum”, а точнее суммы двух чисел: 2+2.

Запуск теста

Для запуска набора модульных тестов необходимо выполнить следующую команду

codecept run unit

Selection_046_2_800x600.png

Зеленый цвет и надпись “OK” нам говорит о том, что тест “SumCest” отработал успешно.

Теперь давайте представим ситуацию, что функция “sum()” была изменена или произошла ошибка слияния в результате использования контроля версий. Предположим математический оператор “+” был изменен на “-”

function sum($x, $y) {
    return $x - $y;
}

Запустим набор тестов повторно

codecept run unit

Selection_049_800x600.png

Как видим, тест не был пройден. Произошла ошибка так как ожидался результат 4, а был получен 0

Информация

Автор конспекта


Дата создания: 03.01.2019
Категория: Тестирование