Недавно я работал над инструментом командной строки PHP, и у меня не было легкого доступа к нашей обычной инфраструктуре модульного тестирования PHP, построенной на SimpleTest . После нескольких строк разработки, не основанной на тестах , я начал немного волноваться — я полагаю, что упал на мысль, что, если код не имеет тестов, он сломан.
Мне не требовалась поддержка фиктивных объектов или сложных утверждений — достаточно простого assertTrue()
Итак, я представляю «pTest» в 9 строках кода:
/**
* pTest - PHP Unit Tester
* @param mixed $test Condition to test, evaluated as boolean
* @param string $message Descriptive message to output upon test
*/
function assertTrue($test, $message)
{
static $count;
if (!isset($count)) $count = array('pass'=>0, 'fail'=>0, 'total'=>0);
$mode = $test ? 'pass' : 'fail';
printf("%s: %s (%d of %d tests run so far have %sed)n",
strtoupper($mode), $message, ++$count[$mode], ++$count['total'], $mode);
}
Вот несколько надуманных тестовых примеров для демонстрации:
assertTrue(1 + 1 == 2, 'one plus one should equal two');
assertTrue(false, 'false should be true (this one will fail)');
assertTrue(!false, 'false should be false');
И пример вывода:
PASS: один плюс один должен равняться двум (1 из 1 проведенных тестов пройден)
FAIL: false должно быть true (этот не пройдёт) (1 из 2 тестов, выполненных до сих пор, не пройден)
PASS: false должно быть false (2 из 3 выполненных тестов пройдены)
Если вы просматриваете вывод в веб-браузере, вы можете легко обернуть каждое выходное сообщение в тег <p>. Или, если вы используете неработающий браузер, вы можете отправить ответ с header('Content-Type: text/plain');
,
Очевидно, это не следует воспринимать слишком серьезно. С другой стороны, я обнаружил, что крайне полезно заглянуть в несколько сценариев командной строки, над которыми я работал.
Еще одно применение для такой простой функции тестирования — это введение непосвященных в мир модульного тестирования. Я знаю, что до того, как я начал заниматься этим, самым большим препятствием была сложность фреймворков. Возможно, pTest даст начинающим отправную точку, с которой они могут перейти на более многофункциональные фреймворки, такие как PHPUnit или SimpleTest, когда они перерастут скромный assertTrue()