, Это особенность, а не ошибка. Вам просто нужно использовать их соответствующим образом. Если вам нужен тест в производственном коде, не используйте утверждения.

этот вопрос заставил меня задуматься

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: "Реальные программыстали слишком грязно, когда мыне полагаться исключительно на утверждения ".

Вопрос: я ошибаюсь, упрямый, глупый, слишком беззащитный ...

Ответы на вопрос(9)

Ваш ответ на вопрос