Partilhar via


MSTEST0062: Evitar os parâmetros de saída e ref nos métodos de teste

Propriedade Valor
ID da regra MSTEST0062
Título Evitar os parâmetros de out e ref nos métodos de teste
Categoria Usage
A correção é invasiva ou não invasiva Non-breaking
Ativado por padrão Yes
Severidade padrão Advertência
Introduzido na versão 4.1.0
Existe uma correção de código Yes

Motivo

Um método de teste tem parâmetros marcados com out ou ref modificadores.

Descrição da regra

Os métodos de teste não devem ter out ou ref parâmetros. O MSTest é responsável por chamar métodos de teste e nunca lê os valores que são passados por referência após o término do método de teste. Estes modificadores são enganadores porque sugerem que o método de teste devolve valores que serão usados, mas o MSTest nunca os utiliza após a conclusão do teste.

[TestClass]
public class TestClass
{
    [TestMethod]
    public void TestMethod(out string s, ref string s2) // Violation
    {
        s = "test";
    }
}

Como corrigir violações

Remova os modificadores out e ref dos parâmetros do método de teste.

[TestClass]
public class TestClass
{
    [TestMethod]
    public void TestMethod()
    {
        // Test code
    }
}

Se precisar de testar métodos com out ou ref parâmetros, chame-os a partir do seu método de teste:

[TestClass]
public class TestClass
{
    [TestMethod]
    public void TestMethodWithOutParameter()
    {
        // Arrange
        string result;
        string passedByRef = "some value";
        var instance = new MyClass();
        
        // Act
        bool success = instance.TryGetValue(out result, ref passedByRef);
        
        // Assert
        Assert.IsTrue(success);
        Assert.AreEqual("expected", result);
    }
}

Para testes orientados por dados:

[TestClass]
public class TestClass
{
    [TestMethod]
    [DataRow("input1", "expected1")]
    [DataRow("input2", "expected2")]
    public void TestMethod(string input, string expected)
    {
        // Arrange
        string result;
        var instance = new MyClass();
        
        // Act
        bool success = instance.TryParse(input, out result);
        
        // Assert
        Assert.IsTrue(success);
        Assert.AreEqual(expected, result);
    }
}

Quando suprimir avisos

Não suprima avisos desta regra. Não existe um cenário válido onde os métodos de teste devam usar parâmetros out ou ref.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable MSTEST0062
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0062

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0062.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.