Бөлісу құралы:


MSTEST0026. Избегайте условного доступа в утверждениях

Свойство Значение
Идентификатор правила MSTEST0026
Заголовок Избегайте условного доступа в утверждениях
Категория Использование
Исправление является критическим или не критическим Не критическое
Включен по умолчанию Да (от 3.5 до 3.7). Нет (начиная с версии 3.8)
Серьезность по умолчанию Сведения
Представлено в версии 3.5.0
Есть ли исправление кода? No

Причина

Это правило вызывает диагностику, если аргумент, содержащий условный оператор(?.) NULL, или ?[] передается в методы утверждения ниже:

  • Assert.IsTrue
  • Assert.IsFalse
  • Assert.AreEqual
  • Assert.AreNotEqual
  • Assert.AreSame
  • Assert.AreNotSame
  • CollectionAssert.AreEqual
  • CollectionAssert.AreNotEqual
  • CollectionAssert.AreEquivalent
  • CollectionAssert.AreNotEquivalent
  • CollectionAssert.Contains
  • CollectionAssert.DoesNotContain
  • CollectionAssert.AllItemsAreNotNull
  • CollectionAssert.AllItemsAreUnique
  • CollectionAssert.AllItemsAreInstancesOfType
  • CollectionAssert.IsSubsetOf
  • CollectionAssert.IsNotSubsetOf
  • StringAssert.Contains
  • StringAssert.StartsWith
  • StringAssert.EndsWith
  • StringAssert.Matches
  • StringAssert.DoesNotMatch

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

Цель утверждений в модульных тестах — убедиться, что выполнены определенные условия. Когда оператор условного доступа используется в утверждении, он вводит дополнительное условие, которое может быть выполнено или не может быть выполнено в зависимости от состояния доступа к объекту. Это может привести к несогласованным результатам теста и сделать тест менее понятным.

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

Убедитесь, что аргументы не содержат (?.) или ?[] передаются в методы утверждения. Вместо этого выполните проверки null перед утверждением.

Company? company = GetCompany();
Assert.AreEqual("Contoso", company?.Name); // MSTEST0026
StringAssert.Contains(company?.Address, "Brazil"); // MSTEST0026

// Fixed code
Assert.IsNotNull(company);
Assert.AreEqual("Contoso", company.Name);
StringAssert.Contains(company.Address, "Brazil");

Когда лучше отключить предупреждения

Не рекомендуется подавлять предупреждения из этого правила.

Подавление предупреждения

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность в файле конфигурации.

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none

Дополнительные сведения см. в статье Подавление предупреждений анализа кода.