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
Дополнительные сведения см. в статье Подавление предупреждений анализа кода.