Класс Unit Testing (модульное тестирование)
Модульное тестирование — это подход в разработке программного обеспечения, когда тестируется каждая функция в вашем приложении. Если вы не знакомы с этой методикой, прогуглите эту тему.
Класс Unit Testing достаточно прост, он содержит вычисляющую функцию и две функции результата. Он не предназначен для полномасштабного тестирования, но обеспечивает простой механизм для проверки ваших функций, позволяющий определить правильность типов данных и результата.
Инициализация класса
Как и большинство других классов в CodeIgniter, класс Unit Test инициализируется в вашем контроллере с помощью функции $this->load->library:
$this->load->library('unit_test');
Загруженный объект класса 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
Генерация отчетов
Вы можете отображать отчет после каждого теста, или вы можете запускать несколько тестов и генерировать отчет по окончании. Для того, чтобы отобразить отчет, просто сделайте echo результата, возвращенного функцией 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 'This evaluates as true';
Если вы предпочитаете, вы можете запустить класс тестирования в строгий режим, который будет сравнивать типы данных также, как и значения:
if (1 === TRUE) echo 'This evaluates as FALSE';
Для включения строгого режима используйте:
$this->unit->use_strict(TRUE);
Включение и выключение модульного тестирования
Если вы желаете не тестировать некоторые места ваших скриптов при отсутствии необходимости, вы можете выключить тестирование, используя:
$this->unit->active(FALSE)
Отображение модульных тестов
Когда выводятся результаты тестирования, следующие элементы отображаются по умолчанию:
- Имя теста (test_name)
- Тип данных теста (test_datatype)
- Ожидаемый тип данных (res_datatype)
- Результат (result)
- Имя файла (file)
- Номер строки (line)
- Любые примечания, которые вы добавили в тест (notes)
Вы можете указать, какие из этих элементов должны отображаться, используя $this->unit->set_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);
Примечание: Ваш шаблон должен быть декларирован ДО запуска тестирования.