Некоторое время назад я начал писать тесты в PHPUnit (v.9). Это здорово и потрясающе, но:
Как правильно покрыть условные предложения?
Приведу несколько примеров, когда результат правильный и ожидаемый, а где я вижу проблемы. Вот:
Обратите внимание, что приведенный ниже код - это только образец.
Я знаю, что когда я передаю
true
операторуif
, у меня не будет возможности перейти в другую ветку кода. Это только максимально простой пример.
Ситуация, когда проблемы не существует:
if (true) {
return 'true';//here is covered
}
return 'false';//here is not covered
И это нормально, но ниже:
return (true) ? 'true' : 'false';
Вся строка рассматривается как закрытая, но очевидно, что false никогда не будет возвращено.
Так. Что я делаю плохо?
Единственное решение - не использовать тернарный оператор? Его очень короткий синтаксис, но он подвержен ошибкам из-за отсутствия (реальной / ложной) информации о покрытии. :(
1 ответ
Представлением по умолчанию в модуле PHP действительно является покрытие строки , и, следовательно, как вы указываете, невозможно различить обе ветви в однострочном троичном случае.
Однако в последнее время PHPUnit также имеет покрытие ветвей и путей.
Он показывает это в выходных данных слева от «Lines». Чтобы увидеть, какие ветки отсутствуют, вы можете навести указатель мыши на желтую строку в исходном представлении, и она сообщит вам, что (в моем примере) пройдены только 3 из 4 возможных путей.
Автор этой функции также написал подробное объяснение в своем блоге.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.