Compartir por


MSTEST0062: Se deben evitar los parámetros out y ref en los métodos de prueba

Propiedad Importancia
Identificador de la regla MSTEST0062
Título Evitar parámetros out y ref en métodos de prueba
Categoría Usage
La corrección es disruptiva o no disruptiva Non-breaking
Habilitado de forma predeterminada
Gravedad predeterminada Advertencia
introducido en la versión 4.1.0
¿Hay una corrección de código?

Causa

Un método de prueba tiene parámetros marcados con los modificadores out o ref.

Descripción de la regla

Los métodos de prueba no deben tener parámetros out o ref. MSTest es responsable de llamar a métodos de prueba y nunca lee los valores que se pasan por referencia después de que finalice el método de prueba. Estos modificadores son engañosos porque sugieren que el método de prueba devuelve valores que se usarán, pero MSTest nunca los usa una vez completada la prueba.

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

Cómo corregir infracciones

Quite los modificadores out y ref de los parámetros del método de prueba.

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

Si necesita probar métodos con parámetros out o ref, llámelos desde su método de prueba.

[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 las pruebas controladas por datos:

[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);
    }
}

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla. No hay ningún escenario válido en el que los métodos de prueba deban usar parámetros out o ref.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad a none en el archivo de configuración.

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

Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.