MSTEST0006. Избегайте [ExpectedException]
Свойство | Значение |
---|---|
Идентификатор правила | MSTEST0006 |
Заголовок | Избегать [ExpectedException] |
Категория | Проект |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию | Да |
Серьезность по умолчанию | Сведения |
Представлено в версии | 3.2.0 |
Есть ли исправление кода? | Да, начиная с версии 3.7.0 |
Причина
Метод помечается атрибутом [ExpectedException]
.
Описание правила
Предпочитайте Assert.ThrowsException
или Assert.ThrowsExceptionAsync
(или Assert.ThrowsExactly
/Assert.Throws
или Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
при использовании MSTest 3.8 и более поздних версий) над атрибутом [ExpectedException]
, так как это гарантирует, что только ожидаемая строка кода создает ожидаемое исключение, а не действует на весь текст теста. API утверждений также обеспечивают большую гибкость и позволяют утверждать дополнительные свойства исключения.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))] // Violation
public void TestMethod()
{
// Arrange
var person = new Person
{
FirstName = "John",
LastName = "Doe",
};
person.SetAge(-1);
// Act
person.GrowOlder();
}
}
Устранение нарушений
Замените использование атрибута [ExpectedException]
вызовом Assert.ThrowsException
или Assert.ThrowsExceptionAsync
(или Assert.ThrowsExactly
/Assert.Throws
или Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
при использовании MSTest 3.8 и более поздних версий).
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
// Arrange
var person = new Person
{
FirstName = "John",
LastName = "Doe",
};
person.SetAge(-1);
// Act
Assert.ThrowsExactly(() => person.GrowOlder());
}
}
Когда лучше отключить предупреждения
Это безопасно, чтобы отключить эту диагностику, если метод является однострочный.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestMethod()
{
new Person(null);
}
}
Подавление предупреждения
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none
Дополнительные сведения см. в статье Подавление предупреждений анализа кода.