Уже давно я готов Макконнелла " Code Complete ". Теперь я снова читаю это в Hunt & Thomas ' Прагматичный программист": используйте утверждения! Примечание: не утверждения модульного тестирования, я имею в виду Debug.Assert()
.
После вопросов SO Когда мне следует использовать Debug.Assert ()? и Когда использовать утверждение над исключениями в классах домена утверждения полезны для разработки, поскольку "невозможные" ситуации можно найти довольно быстро. И кажется, что они обычно используются. Насколько я понял утверждения, в C # они часто используются для проверки входных переменных на «невозможные» значения.
Чтобы сделать модульные тесты краткими и максимально изолированными, я делаю классы и методы подачи с помощью null
s и "невозможного" фиктивного ввода (например, пустой строки).
Такие тесты явно документируют, что они не полагаются на какой-то конкретный ввод. Примечание: я практикую то, что Мешарош "Тестовые шаблоны xUnit" описывает как Минимальное приспособление .
И в этом суть: если бы у меня были утверждения, защищающие эти входы, они взорвали бы мои юнит-тесты.
Мне нравится идея Ассертивного Программирования, но, с другой стороны, мне не нужно ее форсировать. В настоящее время я не могу думать о каком-либо использовании для Debug.Assert()
. Может быть, я что-то пропустил? Есть ли у вас предложения, где они могут быть действительно полезными? Может быть, я просто переоцениваю полезность утверждений? Или, может быть, необходимо пересмотреть мой способ тестирования?
Редактировать: Рекомендации по отладке утверждений во время модульного тестирования очень похожи, но не отвечают на вопрос, который меня беспокоит: следует ли мне беспокоиться о Debug.Assert()
в C #, если я тестирую, как я описал ? Если да, в какой ситуации они действительно полезны? В моей нынешней точке зрения такие юнит-тесты сделали бы Debug.Assert()
ненужным.
Еще один момент: если вы действительно так думаете, это дублирующий вопрос, просто оставьте комментарий.