Всех с наступившим! В книге «Совершенный код» Стив Макконелл рекомендует использовать утверждения (assertions) при написании кода для того, чтобы сделать очевидными для остальных программистов некоторые допущения в каждом конкретном месте программы и иметь возможность отлавливать нештатные ситуации, когда эти допущения оказываются неверными. В PHP существует 2 встроенные функции для работы с утверждениями:
- assert — позволяющая записывать утверждения
- assert_options — позволяющая задать различные опции обработки утверждений, в том числе обработчик по-умолчанию для неверных утверждений, аналогично функциям set_exception_handler и set_error_handler.
Я достаточно давно программирую на PHP, но встречал не так уж много кода, где бы использовались эти функции. Меня интересует ситуация, когда где-нибудь в середине метода или функции нужно явно указать на предполагаемую верность какого-либо утверждения. Например:
function doIt(){
$a = 1;
$b = 0;
//...
$b = $c[2];
assert('$a == $b'); //Для дальнейшего выполнения программы это явно предполагается. До присвоения значения $b, утверждение может быть неверно.
//...
}
Вопрос: каким образом более правильно использовать утверждения в PHP для указанной ситуации? Нужно ли использовать эти функции или же теперь это делается через системы модульного тестирования (т.е. методы наподобие assertEquals и т.п.)? Если используются модульные тесты, то каким образом решить проблему, приведенную в коде выше?