Regras de supressão do MSTest

As regras de supressão suprimem automaticamente os diagnósticos de outros analisadores (como Roslyn ou analisadores de threading do Visual Studio) que não se aplicam no contexto dos testes MSTest.

Regras nesta categoria

ID da regra Title Suprime
MSTEST0027 Suprime o sufixo assíncrono para métodos de teste. VSTHRD200
MSTEST0028 Suprime o sufixo assíncrono para métodos de teste de fixture. VSTHRD200
MSTEST0033 Ocultar referência não inicializada e não anulável. CS8618
MSTEST0047 Suprima o parâmetro TestContext não utilizado dos métodos de fixture. IDE0060

Como funcionam as regras de supressão

Essas regras não produzem seus próprios diagnósticos. Em vez disso, eles suprimem avisos de outros analisadores que, de outra forma, disparariam incorretamente no código de teste.

VSTHRD200: usar o sufixo assíncrono para métodos assíncronos

Suprimido por: MSTEST0027, MSTEST0028

Por que suprimir: o analisador de threading do Visual Studio (VSTHRD200) recomenda que os métodos assíncronos tenham um sufixo "Assíncrono". No entanto, métodos de teste e métodos de instalação de teste são descobertos pelo MSTest por meio de atributos, não convenções de nomenclatura. Adicionar sufixos "Async" aos nomes de métodos de teste (por exemplo, TestLoginAsync) não fornece nenhum valor e pode tornar os nomes de teste menos legíveis.

Exemplo:

[TestMethod]
public async Task TestLogin() // VSTHRD200 would warn without suppression
{
    await LoginAsync();
    // ...
}

CS8618: referência não anulável não inicializada

Suprimido por: MSTEST0033

Por que suprimir: ao usar tipos de referência anuláveis, o compilador alerta sobre propriedades não anuláveis que não são inicializadas em construtores. No entanto, o MSTest inicializa automaticamente a TestContext propriedade antes que os métodos de teste sejam executados, de modo que o aviso não se aplique.

Exemplo:

[TestClass]
public class MyTests
{
    public TestContext TestContext { get; set; } = null!; // CS8618 would warn without suppression
    
    [TestMethod]
    public void TestSomething()
    {
        // TestContext is guaranteed to be non-null here
        TestContext.WriteLine("Test output");
    }
}

IDE0060: remover parâmetro não utilizado

Suprimido por: MSTEST0047

Por que suprimir: o MSTest permite que você receba o TestContext parâmetro como um parâmetro de métodos de fixação marcados com [AssemblyInitialize], [ClassInitialize], ou [GlobalTestInitialize][GlobalTestCleanup]. O MSTest requer esse parâmetro mesmo quando o corpo do método não o usa, portanto, IDE0060 (que sinaliza parâmetros não utilizados) não se aplica.

Exemplo:

[TestClass]
public class MyTests
{
    [ClassInitialize]
    public static void ClassInitialize(TestContext context) // IDE0060 would warn without suppression
    {
        // context isn't used, but MSTest requires the parameter
    }
}

Desabilitar regras de supressão

Se você preferir ver esses avisos, desabilite as regras de supressão em seu .editorconfig:

[*.cs]
dotnet_diagnostic.MSTEST0027.severity = none
dotnet_diagnostic.MSTEST0028.severity = none
dotnet_diagnostic.MSTEST0033.severity = none
dotnet_diagnostic.MSTEST0047.severity = none