Почему существует Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Equals()?

Описание для Assert.Equals() из документации MSDN: Не используйте этот метод.

Что это, полное объяснение. Ну.. хорошо, но тогда... почему это там? Является ли это устаревшим методом из более ранней версии структуры? Что-то, что должно использоваться только другими сборками Microsoft?

Это просто заставляет меня хотеть использовать его, тем более зная, что я не должен.; -)

Кто-нибудь знает?

Ответы

Ответ 1

.Equals наследуется от объекта. Он указан как "Не используйте этот метод", поэтому пользователи не будут путать его с методом AreEqual.

Ответ 2

Все объекты в .NET получают из Object.

Объект имеет метод .Equals().

По-видимому, метод .Equals() для этого конкретного объекта ничего полезного не делает, поэтому документы предупреждают вас, что он ничего полезного не делает.

Ответ 3

В 2008 году (возможно, SP1) было изменено, чтобы пропустить тест при вызове, чтобы люди, которые использовали его случайно, сказали, что они действительно не должны его использовать.

Ответ 4

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 всегда генерируется исключение, напоминающее вам не использовать его.