, Это особенность, а не ошибка. Вам просто нужно использовать их соответствующим образом. Если вам нужен тест в производственном коде, не используйте утверждения.
этот вопрос заставил меня задуматься
assert(value>0); //Precondition
if (value>0)
{
//Doit
}
Я никогда не пишу if-утверждение. Утверждение достаточно / все выМожно делать. "Сбой рано, часто сбой"
CodeComplete состояния:
Утверждение assert делает приложение корректнымТест if делает приложение надежнымЯ не думаю, что вы сделали приложение более устойчивым, исправляя неверные значения ввода или пропуская код:
assert(value >= 0 ); //Precondition
assert(value <= 90); //Precondition
if(value < 0) //Just in case
value = 0;
if (value > 90) //Just in case
value = 90;
//Doit
Эти исправления основаны на предположениях, которые вы сделали относительно внешнего мира. Только вызывающий объект знает, что такое «допустимое входное значение» для вашей функции, и он должен проверить ее действительность, прежде чем он вызовет вашу функцию.
ПерефразироватьCodeComplete: "Реальные программыстали слишком грязно, когда мыне полагаться исключительно на утверждения ".
Вопрос: я ошибаюсь, упрямый, глупый, слишком беззащитный ...