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