Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
MSTEST0058: Избегайте утверждений в
| Недвижимость | Ценность |
|---|---|
| Идентификатор правила | MSTEST0058 |
| Заголовок | Избегайте утверждений в блоках catch |
| Категория | Usage |
| Исправление является разрушающим или неразрушающим | Non-breaking |
| Включен по умолчанию | Да |
| Серьезность по умолчанию | Info |
| представлено в версии | 4.1.0 |
| Существует ли исправление кода | нет |
Причина
Метод тестирования содержит операторы утверждений внутри блока catch.
Описание правила
Размещение утверждений в catch блоках является анти-шаблоном, который может привести к запутанным результатам теста и делает тесты более сложными для понимания. При возникновении исключения выполняется блок catch, после чего выполняется утверждение. Однако если исключение не возникает, блок catch никогда не выполняется, потенциально создавая ложное чувство уверенности, что тест прошел.
Вместо этого используйте Assert.Throws или аналогичные методы, чтобы убедиться, что ожидаемые исключения выбрасываются. Это делает намерение теста более понятным и гарантирует правильное поведение теста.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
try
{
// Code that might throw.
DoSomethingThatMightThrow();
}
catch (Exception ex)
{
Assert.AreEqual("Expected error message", ex.Message); // Violation
}
}
}
Устранение нарушений
Используйте Assert.Throws, Assert.ThrowsExactly или связанные методы утверждения для проверки исключений.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod_ThrowsExceptionWithExpectedMessage()
{
InvalidOperationException exception = Assert.Throws<InvalidOperationException>(() => DoSomethingThatMightThrow());
Assert.AreEqual("Expected error message", exception.Message);
}
}
Когда следует подавлять предупреждения
Вы можете отключить это предупреждение, если у вас есть законная необходимость перехватывать исключение и выполнять сложную проверку, которая не может быть легко выражена с помощью стандартных методов утверждения. Однако сначала рассмотрите возможность рефакторинга теста, чтобы использовать более явные утверждения исключений.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable MSTEST0058
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0058
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0058.severity = none
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".