Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
| Свойство | Значение |
|---|---|
| Идентификатор правила | MSTEST0026 |
| Заголовок | Избегайте условного доступа в утверждениях |
| Категория | Использование |
| Исправление является критическим или не критическим | Не критическое |
| Включен по умолчанию | Да (от 3.5 до 3.7). Нет (начиная с версии 3.8) |
| Серьезность по умолчанию | Сведения |
| Представлено в версии | 3.5.0 |
| Есть ли исправление кода? | No |
Причина
Это правило вызывает диагностику, если аргумент, содержащий условный оператор(?.) NULL, или ?[] передается в методы утверждения ниже:
Assert.IsTrueAssert.IsFalseAssert.AreEqualAssert.AreNotEqualAssert.AreSameAssert.AreNotSameCollectionAssert.AreEqualCollectionAssert.AreNotEqualCollectionAssert.AreEquivalentCollectionAssert.AreNotEquivalentCollectionAssert.ContainsCollectionAssert.DoesNotContainCollectionAssert.AllItemsAreNotNullCollectionAssert.AllItemsAreUniqueCollectionAssert.AllItemsAreInstancesOfTypeCollectionAssert.IsSubsetOfCollectionAssert.IsNotSubsetOfStringAssert.ContainsStringAssert.StartsWithStringAssert.EndsWithStringAssert.MatchesStringAssert.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
Дополнительные сведения см. в статье Подавление предупреждений анализа кода.