Как заменить сообщение об ошибке утверждения? Если я вызову $this->assertTrue(false, 'message')
, он отобразит как строку «сообщение», так и другое сообщение о том, что false неверно. Как мне получить только вывести сообщение, которое я выбрал? Возможно ли это?Как заменить сообщение утверждения phpunit?
ответ
Невозможно.
Зачем вам это нужно? Никогда не встречал случая, когда сообщение по умолчанию ничего не помогает. Пользовательское сообщение должно добавлять информацию, а не заменять значение по умолчанию.
Потому что, если я хочу определить пользовательское утверждение, я не могу обернуть существующий (например, assertThat), потому что он будет обрабатывать собственное сообщение. поскольку в конце концов все сводится к assertTrue, вы получаете такие сообщения, как «Не удалось утверждать, что X имеет свойство Y. Не удалось утверждать, что false истинно», что раздражает и не помогает. – Benubird
Это зависит от мнения каждого, но позвольте мне показать реальный пример: $ this-> assertNull ($ this-> router-> match ($ url), "URL '{$ url}' соответствует и не должен"); В этом примере я увижу нормальную ошибку, показывая мне, ЧТО было действительно возвращено, что полезно, и мое пользовательское сообщение об ошибке, которое помогает понять ПОЧЕМУ, что это не нормально. EDIT: это входит в пользовательское утверждение, называемое assertUrlDoesNotMatch ($ url) – gontrollez
Не будет ли сообщение ответа на утверждение для этого просто «Объект не соответствует ожидаемому NULL»? что не представляется целесообразным включить - ваш пример, по-видимому, является хорошим аргументом в том случае, если вы захотите проигнорировать сообщение по умолчанию. – Benubird
код-костыль, который приходит на ум, когда я столкнулся с той же проблемой:
public function assertTrue($condition, $message = '')
{
if (!$condition) $this->fail($message);
}
С PHPUnit 6 вы должны иметь получили одно утверждение, по крайней мере, так я предлагаю немного отредактированный @avolkov ответ:
public function assertTrue($condition, $message = '')
{
if (!$condition){
$this->fail($message); //This will cause test fail with your message
}
else{
$this->anything(); //This will eliminate error which says that your test doesn't have assertion
}
}
Мне интересно, зачем вам это нужно. Возможно, вы используете один и тот же тип утверждения для всех проверок? 'Как assertTrue ($ a == $ b)'. – gontrollez
Поскольку до сих пор единственный способ определить пользовательское утверждение с помощью специального сообщения - написать класс, который расширяет PHPUnit_Framework_Constraint - что раздражает, когда я могу просто использовать одно из существующих ограничений путем предварительной обработки параметров. – Benubird