Поделиться через


MSTEST0038. Не используйте "Assert.AreSame" или "Assert.AreNotSame" с типами значений

Свойство Ценность
код правила MSTEST0038
заголовок Не используйте "Assert.AreSame" или "Assert.AreNotSame" с типами значений
Категория Употребление
исправление является критическим или неразрывным Неразрывная
включен по умолчанию Да
Уровень серьёзности по умолчанию Предупреждение
представлено в версии 3.8.0
Есть ли исправление кода? Да

Причина

Использование Assert.AreSame или Assert.AreNotSame, если один или оба аргумента являются типом значения.

Описание правила

Assert.AreSame и Assert.AreNotSame работают путём сравнения ссылок заданных expected/notExpected и фактических аргументов с помощью ReferenceEquals. Поэтому при передаче типа значения оно упаковывается .

При использовании AreSameутверждение всегда завершается ошибкой. При использовании AreNotSameутверждение всегда будет проходить.

Для AreSameединственным случаем, когда утверждение выполняется, является случай, если оба аргумента являются типами значений, допускающими NULL, и их значения также имеют NULL. В этом случае предпочтительнее сделать два отдельных вызова Assert.IsNull для большей ясности.

Устранение нарушений

Используйте Assert.AreEqual и Assert.AreNotEqual вместо Assert.AreSame и Assert.AreNotSame. Если используется Assert.AreSame и оба аргумента являются типами значений, допускающих значение NULL, значения которых должны быть null, то два отдельных вызова Assert.IsNull могут быть лучше, чем AreEqual, в зависимости от намерения теста.

Когда следует подавлять предупреждения

Не подавляйте предупреждение из этого правила. Игнорирование этого правила приведет к утверждению, которое всегда завершается ошибкой или всегда подтверждается.