Я только что начал снимать «Отладка MS .Net 2.0 Applications» Джона Роббинса и смутился его евангелизмом для Debug.Assert (...).Отладка.Assert против конкретных исключений броска
Он указывает на то, что хорошо реализованная Утверждает хранить состояние, несколько, из-за ошибки, например:
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, так и в релизах) ... или нет. Что мне не хватает?
Утверждение может быть использовано для проверки параметра * Метод внутренних * звонков (так называемого кодом, принадлежащего к той же компоненте) методам, в отличие от внешних вызовов методов (так называемых другим компонент) , Например, я могу утверждать, что параметр частного метода типа Double не является NaN. – RoadWarrior 2008-10-31 11:48:52