Почему действительно Утверждает. AreEqual (T obj1, Tobj2) перестали работать с идентичными массивами байтов

Проверьте свою конфигурацию. Перейдите к "Параметрам настройки системы">, "Клавиатура"

enter image description here

Затем переходит к "Ярлыкам"> "Снимки экрана"

enter image description here

83
задан David Anderson 3 September 2009 в 18:34
поделиться

3 ответа

Assert.Equals тесты с использованием метода Equals , который по умолчанию использует ссылочное равенство и, поскольку это разные объекты, они не равны. Вы захотите сравнить каждый байт в массиве и убедиться, что они равны. Один из способов сделать это - преобразовать их во что-то, что реализует ICollection, и вместо этого использовать CollectionAssert.AreEqual () .

136
ответ дан 24 November 2019 в 08:49
поделиться

The method Assert.AreEqual under the hood will end up defaulting to Object.Equals() for non-null values. The default implementation of Object.Equals() is referential equality. The 2 arrays are identical value wise but difference reference wise and hence will not be considered equal.

2
ответ дан 24 November 2019 в 08:49
поделиться

Поскольку массивы не переопределяют Equals .

Вы не сказали, какой тестовый фреймворк вы используете, но в основном это зависит от этого фреймворка. специальные массивы. Конечно, вы всегда можете реализовать свой собственный вспомогательный метод. Иногда я так поступал. Для быстрого и грязного взлома, если вы используете .NET 3.5, вы можете использовать метод расширения Enumerable.SequenceEqual :

Assert.IsTrue(actual.SequenceEqual(expected));

Пользовательский вспомогательный метод, конечно же, может дать вам более подробную информацию о том, чем они отличаются . Вы можете найти методы в MoreLINQ.TestExtensions полезными, хотя они тоже довольно грубые и готовые.

42
ответ дан 24 November 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: