Ответ 1
.Equals наследуется от объекта. Он указан как "Не используйте этот метод", поэтому пользователи не будут путать его с методом AreEqual.
Описание для Assert.Equals() из документации MSDN: Не используйте этот метод.
Что это, полное объяснение. Ну.. хорошо, но тогда... почему это там? Является ли это устаревшим методом из более ранней версии структуры? Что-то, что должно использоваться только другими сборками Microsoft?
Это просто заставляет меня хотеть использовать его, тем более зная, что я не должен.; -)
Кто-нибудь знает?
.Equals наследуется от объекта. Он указан как "Не используйте этот метод", поэтому пользователи не будут путать его с методом AreEqual.
Все объекты в .NET получают из Object.
Объект имеет метод .Equals().
По-видимому, метод .Equals() для этого конкретного объекта ничего полезного не делает, поэтому документы предупреждают вас, что он ничего полезного не делает.
В 2008 году (возможно, SP1) было изменено, чтобы пропустить тест при вызове, чтобы люди, которые использовали его случайно, сказали, что они действительно не должны его использовать.
Assert.Equals
, как и его метод класса Object.Equals
, отлично подходит для сравнения объектов. Тем не менее, ни один из методов не является полезным для автономного обнаружения и отчетности или ошибок в модульном тестировании, поскольку Object.Equals
возвращает логическое значение, а не бросает, если значения не равны. Это проблема, если она используется в unit test:
Assert.Equals(42, ComputeMeaningOfLife());
Помимо проблемы этого unit test возможно слишком продолжительного:-), этот тест будет безуспешным, даже если метод Compute дает неверный результат. Правильный способ использования - Assert.AreEqual
, который ничего не возвращает, но генерирует исключение, если параметры не равны.
Assert.Equals
был добавлен, поэтому код, подобный приведенному выше примеру, не возвращается к Object.Equals
и молча отключает unit test. Вместо этого при вызове из unit test, Assert.Equals
всегда генерируется исключение, напоминающее вам не использовать его.