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
, в зависимости от намерения теста.
Когда следует подавлять предупреждения
Не подавляйте предупреждение из этого правила. Игнорирование этого правила приведет к утверждению, которое всегда завершается ошибкой или всегда подтверждается.