Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
MSTEST0006. Избегайте
| Property | Value |
|---|---|
| Идентификатор правила | MSTEST0006 |
| Title | Избегать [ExpectedException] |
| Category | Design |
| Исправление является критическим или не критическим | Non-breaking |
| Включен по умолчанию | Yes |
| Серьезность по умолчанию | Предупреждение начиная с версии 3.10, сведения до |
| Представлено в версии | 3.2.0 |
| Есть ли исправление кода? | Да, начиная с версии 3.7.0 |
Замечание
Этот анализатор больше не относится к MSTest 4, так как атрибут был удален.
Cause
Метод помечается атрибутом [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
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none
Дополнительные сведения см. в статье Подавление предупреждений анализа кода.