C# Language
Кодовые контракты и утверждения
Поиск…
Утверждения для проверки логики всегда должны быть верны
Утверждения используются не для тестирования входных параметров, а для проверки того, что поток программы является ключевым, то есть вы можете сделать определенные предположения о своем коде в определенный момент времени. Другими словами: тест, выполненный с помощью Debug.Assert
должен всегда предполагать, что проверенное значение true
.
Debug.Assert выполняется только в сборках DEBUG; он отфильтровывается из сборников RELEASE. Он должен считаться инструментом отладки в дополнение к модульному тестированию, а не заменой кодовых контрактов или методов проверки ввода.
Например, это хорошее утверждение:
var systemData = RetrieveSystemConfiguration();
Debug.Assert(systemData != null);
Здесь assert - хороший выбор, потому что мы можем предположить, что RetrieveSystemConfiguration () вернет действительное значение и никогда не вернет null.
Вот еще один хороший пример:
UserData user = RetrieveUserData();
Debug.Assert(user != null);
Debug.Assert(user.Age > 0);
int year = DateTime.Today.Year - user.Age;
Во-первых, мы можем предположить, что RetrieveUserData () вернет действительное значение. Затем, прежде чем использовать свойство Age, мы проверим предположение (которое всегда должно быть правдой), что возраст пользователя строго положителен.
Это плохой пример утверждения:
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Debug.Assert(age > 16);
Console.WriteLine("Great, you are over 16");
Утверждение не для проверки ввода, потому что неверно предполагать, что это утверждение всегда будет истинным. Для этого вы должны использовать методы проверки ввода. В приведенном выше случае вы также должны убедиться, что входное значение - это номер в первую очередь.