Я только что начал читать «Отладку приложений MS .Net 2.0» Джона Роббинса и смутился из-за его евангелизации Debug.Assert (...).
Он указывает, что правильно реализованные Утверждения хранят состояние, в некоторой степени, состояния ошибки, например ::100100
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
Теперь лично мне кажется безумным, что он так любит перезапускать свой тест без реального разумного комментария «бизнес-логики», возможно, «я <= 3 никогда не должен происходить из-за процесса виджирования flobittyjam». </p>
Итак, я думаю, что я получаю Утверждения как своего рода низкоуровневую вещь «Давайте защитим мои предположения» ... предполагая, что кто-то чувствует, что это тест, который нужно выполнить только при отладке - то есть вы защищаете вы сами против коллег и будущих программистов и надеетесь, что они действительно проверят что-то.
Но что я не понимаю, так он продолжает, что вы должны использовать утверждения в дополнение к обычной обработке ошибок; Теперь я вижу что-то вроде этого:
Debug.Assert(i > 3, "i must be greater than 3 because of the flibbity widgit status");
if (i <= 3)
{
throw new ArgumentOutOfRangeException("i", "i must be > 3 because... i=" + i.ToString());
}
Что я получил от повторения Debug.Assert теста состояния ошибки? Я думаю, я бы понял, если бы мы говорили о двойной проверке очень важного вычисления только для отладки ...
double interestAmount = loan.GetInterest();
Debug.Assert(debugInterestDoubleCheck(loan) == interestAmount, "Mismatch on interest calc");
... но я не получаю его для тестов параметров, которые, безусловно, стоит проверить (как в сборках DEBUG, так и в Release) ... или нет. Чего мне не хватает?