Состав пакета
В пакет входят следующие классы:
- WException
- WInvoker
- WGroupTest
- WTestarter
- WUTest
Здесь мы имеем один из тех немногих случаев, когда использование исключений
действительно оправдано, так здесь не подразумевается вообще какая-либо
обработка ошибочных ситуаций. Исключения используется для форсирования стека
при провале assert-ов. Перехват исключений выполняется в классе WInvoker,
наследующий от SimpleInvoker, который обволакивает исполнение тестового метода
сеткой try/catch.
Выброс исключения инициирует класс WUTest, который является
наследником UnitTestCase. WUTest перегружает метод createInvoker в котором и
выполняет конструкцию экземпляра WInvoker вместо SimpleInvoker. Метод
assertTrue так же перегружается, его новая реализация подразумевает выброс
исключения при провале вызова базовой реализации метода. Кроме того, в класс
WUTest добавлены методы initCase и cleanCase, которые вызываются соответственно
перед и после выполнения тестов (вызов базовой реализации метода run). Как
следует из названия, эти методы предназначены для общей инициализации
юнит-теста. Здесь следует заметить, что в случае провала initCase тесты
выполняться не будут.
Для того, что бы GroupTest при подключении файлов не обрабатывал служебные
классы, унаследованные от GroupTest и UnitTestCase и не включал результаты
их тестирования в отчет, пришлось так же немного модифицировать механизм
класса GroupTest. Класс WGroupTest унаследован от GroupTest и умеет различать
юнит-тесты унаследованные от WUTest и WGroupTest, сохраняя при этом возможность
использования юнит-тестов унаследованных от UnitTestCase и GroupTest.
И последний класс WTestarter - это один из вариантов организации тестового
пространства. Данный класс реализует три механизма определения списка тестов:
- непосредственное определение списка тестов через аргументы командной строки;
- определение списка тестов в файле очереди;
- определение списка тестов на основе результатов сканирования директории
С использованием WTestarter код запуска тестов значительно сокращается
// unit_tests.php
include_once(wtest/wtestarter.class.php");
$tests = new WTestarter();
$tests->getTests()->run($tests->getReporter());
По умолчанию WTestarter использует подкаталог unit_test текущего каталога в
качестве каталога тестов и unit_test/_tests_queue в качестве имени файла очереди
исполнения тестов. Если возникает необходимость определить другой каталог тестов
или другое имя файла очереди, можно модифицировать публичные атрибуты класса
WTestarter->tests_path и WTestarter->tests_queue соответственно. Так же
предусмотрен прием этих значений в конструктор.
Теперь для того, что бы запустить какие-либо отдельные тесты, например
находящиеся в файле some_unit_test.php, необходимо выполнить команду
% php unit_tests.php some_unit_test
Если такой файл существует в каталоге тестов, то будут выполнены все тесты,
объявленные в этом файле а так же тесты, которые подключены в этом файле
посредством include или аналогичными способами.
Без указания аргументов, WTestarter сначала просматривает файл очереди. Имена
файлов тестов (без расширения .php) будут добавлены в группу тестов в том
порядке, в котором они определены в файле очереди. В случае если файла очереди
не существует, WTestarter построит список тестов на основании содержимого
каталога тестов. Следует учитывать что в последнем случае последовательность
выполнения тестов не определена. Так же следует помнить что тесты, имена которых
соответствуют регулярке /^\./ не будут включены в группу для исполнения.
Наверх