Лучшие программисты допускают ошибки. Разница между хорошими программистами и плохими программистами заключается в том, что хорошие программисты могут найти как можно больше ошибок посредством тестирования. Чем быстрее вы тестируете ошибки, тем быстрее вы их находите и тем дешевле их найти и исправить. Это объясняет, почему тестирование программного обеспечения непосредственно перед его выпуском так проблематично. Большинство ошибок никогда не обнаруживаются, а количество исправлений найденных ошибок настолько велико, что вам приходится отдавать приоритет исправлению только этих ошибок, потому что вы просто не можете позволить себе исправить их все.
Тестирование с помощью PHPUnit не сильно отличается от используемого вами подхода. Просто у них разные методы. Разница между ними заключается в том, что проверка правильности поведения программы осуществляется с помощью пакета фрагментов кода, которые можно протестировать автоматически. Эти фрагменты кода называются модульными тестами. В этой части мы сначала проводим автоматическое тестирование на основе распечатанного тестового кода. Предположим, мы хотим протестировать встроенный массив PHP Array. Одним из тестов, который необходимо выполнить, является функция sizeof(). Функция sizeof() должна возвращать 0 для любого вновь созданного массива. Когда мы добавляем новый элемент массива, sizeof() должен возвращать 1. Пример 1 показывает, что мы хотим протестировать.
Пример 1. Тестовый массив и sizeof()
<?php
$фикстура = Массив( );
// $fixture должен быть пустым.
$fixture[] = "элемент";
// $fixture должен содержать член массива.
?>
Самый простой метод проверки — распечатать результаты операции sizeof() до и после добавления элементов массива. Если возвращаются 0 и 1, это означает, что Array и sizeof() работают нормально.
Пример 2. Используйте операторы печати для проверки Array и sizeof()
<?php
$фикстура = Массив( );
print sizeof($fixture) "n";
$fixture[] = "элемент";
напечатайте sizeof($fixture) "n";
?>
0
1
Теперь мы переводим тестовую программу из режима ручной интерпретации в режим ее автоматического запуска. В примере 3 мы сравниваем ожидаемое значение с фактическим значением и печатаем «ОК», если они равны. Если мы обнаружим, что некоторые результаты не в порядке, мы знаем, что есть проблема.
Пример 3. Сравните ожидаемое и фактическое значения Array и sizeof()
<?php
$фикстура = Массив( );
print sizeof($fixture) == 0 ? "okn" : "не okn";
$fixture[] = "element";
print sizeof($fixture) == 1 ? "окn" : "не окn";
?>
ХОРОШО
ОК
, теперь мы вводим новый элемент. Если ожидаемое значение отличается от фактического значения, мы выдаем исключение. Таким образом, наш вывод будет проще. Если тест пройден успешно, ничего не делается, если есть необработанное исключение, мы знаем, что что-то не так.
Пример 4. Использование функций утверждения для проверки Array и sizeof()
<?php
$фикстура = Массив( );
AssertTrue(sizeof($fixture) = = 0
$fixture[] = "элемент";
AssertTrue(sizeof($fixture) = = 1
функция AssertTrue($condition) {
);
если (!$условие) {
throw new Exception("Утверждение не выполнено.");
}
}
?>
Теперь тест полностью автоматизирован. В отличие от нашей первой версии, эта версия делает тестирование полностью автоматизированным.
Цель использования автоматизированного тестирования — совершить как можно меньше ошибок. Даже если ваш код еще не идеален, при хорошем автоматизированном тестировании вы обнаружите, что количество ошибок значительно сократится. Автоматизированное тестирование дает вам уверенность в честности вашего кода. Обладая этой уверенностью, вы можете совершать смелые шаги в дизайне, лучше сотрудничать со своей командой, улучшать отношения между вами и вашими клиентами и спать спокойно каждый день, потому что вы можете доказать, что система становится лучше благодаря вашим усилиям.