Я только начал снимать "Отладка приложений MS.Net 2.0" Джона Роббинса и смутился его евангелизмом для Debug.Assert(...).
Он указывает, что хорошо реализованные Asserts сохраняют состояние, несколько, условия ошибки, например:
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
Теперь, мне кажется, мне кажется безумным, что он так любит повторять свой тест без фактического разумного комментария "бизнес-логики", возможно, "i <= 3 никогда не должно происходить из-за процесса внедрения флабитиджама".
Итак, я думаю, что я получаю Asserts как своего рода низкоуровневое "Пусть защищают мои предположения"... что если вы считаете, что это тест, который нужно делать только при отладке - то есть вы защищаете себя против коллег и будущих программистов, и надеясь, что они на самом деле проверяют вещи.
Но я не получаю, он затем говорит, что вы должны использовать утверждения в дополнение к нормальной обработке ошибок; теперь то, что я предполагаю, выглядит примерно так:
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, так и в релизах)... или нет. Что мне не хватает?