Вопрос, который я хочу вам задать, довольно широкий, но в то же время очень конкретный. Во-первых, я должен сказать, что меня в основном интересуют ответы, применимые в среде .net.
Ну, я хочу повысить уровень кода, который я создаю. Теперь я в основном использую TDD и статический анализ кода, чтобы убедиться, что мой код правильный. Недавно я слушал выступление Дино Эспозито о кодовых контрактах и теперь хочу использовать его в сочетании с другими техниками. Слушая Дино, я также вспомнил Debug.Assert()
и Trace.Assert()
.
Для конкретики задам несколько вопросов:
- Как мне написать контракты и модульные тесты, чтобы они дополняли друг друга?
- Должен ли я использовать кодовые контракты в каждом методе или только в общедоступных методах?
- Должен ли я предотвратить использование
Debug.Assert()
? Когда их можно использовать? (Например, обратите внимание, что инварианты в .net проверяются только при выходе из общедоступного метода/свойства. Итак, можно ли выполнять некоторые проверки в середине метода простымAssert()
?) - Не могли бы вы порекомендовать мне проект с открытым исходным кодом, где все эти методы используются должным образом, потому что картинка рисует тысячу слов?
Debug.Assert
заключается в том, что он никогда не доходит до производства. Вы найдете ошибки только в вашей среде разработки/тестирования. Если такая ошибка, которую будет ловить assert, достигнет дикой природы, это усложнит ваше воспроизведение. Использование его вместо утверждения, доступного для выпуска, является шагом оптимизации, а преждевременная оптимизация никогда не бывает хорошей. - person Merlyn Morgan-Graham   schedule 05.09.2011Trace.Assert()
вместоDebug.Assert()
. Вот что об этом говорит MSDN: › По умолчанию метод Debug.Assert работает только в отладочных сборках. Используйте метод Trace.Assert, если вы хотите выполнять утверждения в сборках выпуска. - person Igor Soloydenko   schedule 05.09.2011