Класс Модульного Тестирования
Модульное тестирование-это подход к разработке программного обеспечения, в котором тесты пишутся для каждой функции в вашем приложении. Если вы не знакомы с этой концепцией, то можете немного погуглить на эту тему.
Класс модульного тестирования CodeIgniter довольно прост, состоит из функции оценки и двух функции результата. Он не предназначен быть полноценным тестом, но является довольно простым механизмом оценить ваш код для определения дает ли функция правильный тип данных и результат.
Использование класса модульного тестирования
Инициализация класса
Как и большинство классов CodeIgniter, данный класс инициализируется в вашем контроллере с помощью $this->load->library function:
$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
- is_resource
Создание отчетов
Вы можете либо отображать результаты после каждого теста либо же вы можете запустить несколько тестов и создать отчет в конце. Чтобы показать отчет, достаточно воспользоваться echo или return запущеной функции:
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);
Примечание
Ваш шаблон должен быть объявлен перед запуском процесса тестирования.
Справка класса
- class CI_Unit_test
- set_test_items($items)
Параметры: - $items (массив) – Список видимых элементов теста
Возвращает: пустота
Задает список элементов, которые должны быть видны в тестах. Допустимые значения::
- test_name
- test_datatype
- res_datatype
- result
- file
- line
- notes
- run($test[, $expected = TRUE[, $test_name = 'undefined'[, $notes = '']]])
Параметры: - $test (смешанный) – Тестируемые данные
- $expected (смешанный) – Ожидаемый результат
- $test_name (строка) – Имя теста
- $notes (строка) – Любые заметки, которые прилагаются к тесту
Возвращает: Отчет теста
Возвращаемый тип: строка
Запускает тест.
- report([$result = array()])
Параметры: - $result (массив) – Массив, содержащий результаты тестов
Возвращает: Отчет теста
Возвращаемый тип: строка
Формирует отчет выполненных тестов.
- use_strict([$state = TRUE])
Параметры: - $state (булево) – Метка строгого режима
Возвращаемый тип: пустота
Включает/отключает строгое сравнение в тестах.
- active([$state = TRUE])
Параметры: - $state (булево) – Следует ли включать тестирование
Возвращаемый тип: пустота
Включает/выключает тестирования.