Richter web-программист: создание сайтов, написание интернет-магазинов, создание скриптов на PHP, MySQL, JavaScript. Системы управления сайтом, CMS.
English version

Статьи веб-программиста: Что такое unit-тесты, и как начать ими пользоваться

Система построения сайта SBS "Web-Pro"
SBS Web-Pro Средство для создания и удобного управления сайтом, имеющее расширенные по сравнению с CMS (Content Management System) характеристики. Более 5 лет успешного использования. Подробнее
Пишите!
Telegram
@richter_a

Что такое unit-тесты, и как начать ими пользоваться

К списку статей

Во многих пакетах скриптов, например, скачиваемых из Git-репозиториев, можно заметить наличие папок test или tests. В них обычно располагаются готовые скрипты для unit-тестирования. Что такое unit-тестирование в целом, можно узнать в инете, а здесь рассмотрим частный случай тестирования PHP-скриптов с использованием пакета phpunit, пожалуй, самого популярного в среде PHP.

В первую очередь ставим phpunit через Composer - нам нужен phpunit/phpunit.
И установим какой-нибудь пакет для примера, пусть это будет donatj/simplecalendar.

Переходим в папку vendor/bin - эта папка будет создана Composer'ом.
Запускаем тест пакета такой командой:

phpunit ../donatj/simplecalendar/test/SimpleCalendarTest.php

т.е. в качестве параметра указываем путь к готовому тест-файлу пакета.

В ответе мы увидим ряд точек, что означает, что все тесты пройдены. Количество точек соответствует количеству тестов (в одном скрипте может быть несколько тестов). Если же какой-то из тестов не пройден, то вместо точки будет буква F, а ниже будет пояснение, что именно пошло не так.

Не очень понятно, что вообще происходит? В скрипте теста прогоняются функции с заданными параметрами, phpunit сверяет ожидаемый и реальный результаты.
Для лучшего понимания напишем свой простой тест, назовём файл MyClassTest.php (имя может быть любым) и положим его в корень проекта:


< ?php
require __DIR__ . '/vendor/autoload.php';

class MyClass {
    public function simpleFunction($x, $y)
    {
        return $x + $y;
    }
}

class MyClassTest extends PHPUnit_Framework_TestCase {
    public function testSimpleFunction()
    {
        $my = new MyClass();
        $this->assertEquals(5, $my->simpleFunction(2, 3));
    }
}
Мы создали 2 класса - тот, который будем тестировать - MyClass, и тот, с помощью которого будем тестировать - MyClassTest. У нас всего одна функция, поэтому и тест будет один. Как видно, есть правила именования тест-класса и функций в нём. Имя класса состоит из имени тестируемого класса + "Test", а имя функции состоит из "test" + имя тестируемой функции.
assertEquals() это одна из функций, встроенных в phpunit, в частности она проверяет совпадение результатов. Мы указали первым параметром 5, т.е. ожидается, что тестируемая функция вернёт значение 5.

Остаётся запустить тест:

phpunit ../../MyClassTest.php

Как видим, всё просто.

© 2018 Richter
Распространение только с разрешения автора
Рейтинг: 7.0. Голосов: 1
(0) Добавить комментарий

Наверх