Compartir por


MSTEST0063: las clases de prueba deben tener constructores válidos

Propiedad Importancia
Identificador de la regla MSTEST0063
Título Las clases de prueba deben tener constructores válidos
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? No

Causa

Una clase de prueba no tiene un constructor válido. Los constructores válidos son public y sin parámetros o tienen un único parámetro de tipo TestContext.

Descripción de la regla

Las clases de prueba deben tener un constructor público que sea sin parámetros o acepte un único TestContext parámetro. Esto permite que el framework de prueba instancie la clase de prueba adecuadamente.

Los constructores que no son públicos, tienen parámetros de tipos no admitidos o tienen varios parámetros no son válidos e impiden que el marco de pruebas cree instancias de la clase de prueba.

[TestClass]
public class MyTestClass
{
    private MyTestClass() // Violation - constructor is not public
    {
    }
}
[TestClass]
public class MyTestClass
{
    public MyTestClass(string value) // Violation - parameter type is not supported
    {
    }
}
[TestClass]
public class MyTestClass
{
    public MyTestClass(TestContext testContext, int value) // Violation - multiple parameters
    {
    }
}

Cómo corregir infracciones

Asegúrese de que la clase de prueba tiene un constructor válido. Un constructor válido debe ser:

  1. Declarado como public.
  2. Sin parámetros o acepta un único TestContext parámetro.

Constructor sin parámetros

[TestClass]
public class MyTestClass
{
    public MyTestClass()
    {
    }

    [TestMethod]
    public void TestMethod()
    {
    }
}

Constructor con TestContext

[TestClass]
public class MyTestClass
{
    private readonly TestContext _testContext;

    public MyTestClass(TestContext testContext)
    {
        _testContext = testContext;
    }

    [TestMethod]
    public void TestMethod()
    {
        _testContext.WriteLine("Test is running...");
    }
}

Constructor implícito sin parámetros

Si no define ningún constructor, el compilador genera automáticamente un constructor público sin parámetros:

[TestClass]
public class MyTestClass
{
    [TestMethod]
    public void TestMethod()
    {
    }
}

Constructores válidos y no válidos juntos

Si la clase de prueba tiene varios constructores, al menos uno debe ser válido:

[TestClass]
public class MyTestClass
{
    public MyTestClass() // Valid - this makes the class valid
    {
    }

    private MyTestClass(int x) // Invalid, but ignored because a valid constructor exists
    {
    }

    [TestMethod]
    public void TestMethod()
    {
    }
}

Cuándo suprimir las advertencias

No suprima advertencias de esta regla. Las clases de prueba sin constructores válidos no se pueden instanciar en el framework de pruebas, y las pruebas no se ejecutarán.

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 MSTEST0063
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0063

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.MSTEST0063.severity = none

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