Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
| 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 | Sí |
| Gravedad predeterminada | Advertencia |
| introducido en la versión | 4.1.0 |
| ¿Hay una corrección de código? | Sí |
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.