2015-07-30 2 views
3

Как заменить сообщение об ошибке утверждения? Если я вызову $this->assertTrue(false, 'message'), он отобразит как строку «сообщение», так и другое сообщение о том, что false неверно. Как мне получить только вывести сообщение, которое я выбрал? Возможно ли это?Как заменить сообщение утверждения phpunit?

+0

Мне интересно, зачем вам это нужно. Возможно, вы используете один и тот же тип утверждения для всех проверок? 'Как assertTrue ($ a == $ b)'. – gontrollez

+1

Поскольку до сих пор единственный способ определить пользовательское утверждение с помощью специального сообщения - написать класс, который расширяет PHPUnit_Framework_Constraint - что раздражает, когда я могу просто использовать одно из существующих ограничений путем предварительной обработки параметров. – Benubird

ответ

-1

Невозможно.

Зачем вам это нужно? Никогда не встречал случая, когда сообщение по умолчанию ничего не помогает. Пользовательское сообщение должно добавлять информацию, а не заменять значение по умолчанию.

+1

Потому что, если я хочу определить пользовательское утверждение, я не могу обернуть существующий (например, assertThat), потому что он будет обрабатывать собственное сообщение. поскольку в конце концов все сводится к assertTrue, вы получаете такие сообщения, как «Не удалось утверждать, что X имеет свойство Y. Не удалось утверждать, что false истинно», что раздражает и не помогает. – Benubird

+0

Это зависит от мнения каждого, но позвольте мне показать реальный пример: $ this-> assertNull ($ this-> router-> match ($ url), "URL '{$ url}' соответствует и не должен"); В этом примере я увижу нормальную ошибку, показывая мне, ЧТО было действительно возвращено, что полезно, и мое пользовательское сообщение об ошибке, которое помогает понять ПОЧЕМУ, что это не нормально. EDIT: это входит в пользовательское утверждение, называемое assertUrlDoesNotMatch ($ url) – gontrollez

+1

Не будет ли сообщение ответа на утверждение для этого просто «Объект не соответствует ожидаемому NULL»? что не представляется целесообразным включить - ваш пример, по-видимому, является хорошим аргументом в том случае, если вы захотите проигнорировать сообщение по умолчанию. – Benubird

1

код-костыль, который приходит на ум, когда я столкнулся с той же проблемой:

public function assertTrue($condition, $message = '') 
{ 
    if (!$condition) $this->fail($message); 
} 
0

С 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 
    } 
} 
Смежные вопросы