Класс модульного тестирования (Unit Testing)
Модульное тестирование это подход к разработке программнго обеспечения, при котором тестируется каждая функция вашего приложения. Если вы не знакомы с этой концепцией, вы можете немного прогуглить ее.
Класс модульного тестирования CodeIgniter-а достаточно прост, он состоит из функции оценки и двух функций результата. Он не представляет собой полномасштабный тестовый набор, но является простым механизмом для определения правильности результатов.
Инициализация класса
Как и большинство других классов в CodeIgniter, класс модульного тестирования инициализируется в вашем контроллере посредством функции $this->load->library:
$this->load->library('unit_test');
Загруженный объект класса доступен как $this->unit
Запуск тестов
Запуск теста заключается в постановке теста и исследования результата следующей функции:
$this->unit->run( test, expected result, 'test name', 'notes');
Где test это результат кода, который вы хотите протестировать, expected result это данные, которые вы ожидаете, test name это опциональное имя, которое вы даете тесту и notes это опциональные примечания. Пример:
$test = 1 + 1;
$expected_result = 2;
$test_name = 'Adds one plus one';
$this->unit->run($test, $expected_result, $test_name);
Ожидаемый результат, который вы передаете, может быть литеральным соответствием, или соответствием типа данных. Вот пример литерала:
$this->unit->run('Foo', 'Foo');
Вот пример совпадения типов:
$this->unit->run('Foo', 'is_string');
Обратили внимание на использование "is_string" во втором параметре? Это указывает функции на то, что тип вашего результата должен быть строкой. Вот список доступных типов:
- is_object
- is_string
- is_bool
- is_true
- is_false
- is_int
- is_numeric
- is_float
- is_double
- is_array
- is_null
Генерация отчетов
Вы также можете отображать отчеты после каждого теста, или вы можете запустить несколько тестов и сгенерировать отчет в конце. Чтобы показать отчет, просто выведите в браузер ответ функции run():
echo $this->unit->run($test, $expected_result);
Чтобы запустить полный отчет по всем тестам, сделайте так:
echo $this->unit->report();
Отчет будет форматирован в HTML-таблицу. Если вы предпочитаете использовать строчные данные, вы можете получить массив, используя:
echo $this->unit->result();
Строгий режим
По умолчанию класс модульного тестирования исследует литеральные соответствия неточно. Рассмотрим этот пример:
$this->unit->run(1, TRUE);
Тест сравнивает с целым, но ожидаемый результат булев. PHP, однако при неточном сравнении типов вычислит этот код как TRUE, используя обычное сравнение:
if (1 == TRUE) echo 'Оценивается как true';
Если вы предпочитаете, вы можете включить класс модульного тестирования в строгий режим, который будет сравнивать как содержимое, так и тип данных:
if (1 === TRUE) echo 'Оценивается как FALSE';
Чтобы включить строгий режим, используйте код:
$this->unit->use_strict(TRUE);
Включение и выключение модульного тестирования
Если вы хотите оставить некоторые тесты в ваших скриптах, но не запускать их без необходимости, вы можете выключить модульное тестирование, используя:
$this->unit->active(FALSE)
Отображение модульных тестов
Когда ваш модульный тест отображает результаты, следующие элементы доступны по умолчанию:
- Имя теста (test_name)
- Тип данных теста (test_datatype)
- Ожидаемый тип данных (res_datatype)
- Результат (result)
- Имя файла (file)
- Номер строки (line)
- Любые комментарии для теста (notes)
Настройка отображения тестов
Вы можете указать, какие их этих элементов будут отображены, используя $this->unit->set_test_items(). Например, если вам нужны только имя теста и результат:
$this->unit->set_test_items(array('test_name', 'result'));
Создание шаблона
Если вы хотите форматировать результаты тестирования отлично от предлагаемого по умолчанию, вы можете сделать ваш собственный шаблон. Вот пример простого шаблона. Обратите внимание, что он требует псевдопеременных:
$str = '
<table border="0" cellpadding="4" cellspacing="1">
{rows}
<tr>
<td>{item}</td>
<td>{result}</td>
</tr>
{/rows}
</table>';
$this->unit->set_template($str);
Примечание: Ваш шаблон должен быть декларирован до запуска процесса тестирования.