Partilhar via


MSTEST0063: As classes de teste devem ter construtores válidos

Propriedade Valor
ID da regra MSTEST0063
Título As classes de teste devem ter construtores válidos
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 Não

Motivo

Uma classe de teste não tem um construtor válido. Construtores válidos são public e ou sem parâmetros ou têm um único parâmetro do tipo TestContext.

Descrição da regra

As classes de teste devem ter um construtor público que seja sem parâmetros ou aceite um único TestContext parâmetro. Isto permite que o framework de teste instancie corretamente a classe de teste.

Construtores que são não públicos, têm parâmetros de tipos não suportados ou múltiplos parâmetros não são válidos e impedem o framework de teste de criar instâncias da classe de teste.

[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
    {
    }
}

Como corrigir violações

Assegura-te de que a tua classe de teste tem um construtor válido. Um construtor válido deve ser:

  1. Declarado como public.
  2. Ou sem parâmetros ou aceita um único TestContext parâmetro.

Construtor sem parâmetros

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

    [TestMethod]
    public void TestMethod()
    {
    }
}

Construtor com TestContext

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

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

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

Construtor implícito sem parâmetros

Se não definir nenhum construtor, o compilador gera automaticamente um construtor público sem parâmetros:

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

Construtores válidos e inválidos juntos

Se a sua classe de teste tiver múltiplos construtores, pelo menos um deve 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()
    {
    }
}

Quando suprimir avisos

Não suprima avisos desta regra. Classes de teste sem construtores válidos não podem ser instanciadas pelo framework de teste, e os testes não são executados.

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

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

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

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