Freigeben über


MSTEST0063: Testklassen sollten über gültige Konstruktoren verfügen

Eigentum Wert
Regel-ID MSTEST0063
Title Testklassen sollten über gültige Konstruktoren verfügen
Kategorie Usage
Die Behebung ist eingreifend oder nicht eingreifend Non-breaking
Standardmäßig aktiviert Yes
Voreingestellte Schwere Warnung
wurde in Version eingeführt. 4.1.0
Gibt es eine Codekorrektur Nein

Ursache

Eine Testklasse verfügt nicht über einen gültigen Konstruktor. Gültige Konstruktoren sind public und entweder parameterlos oder haben einen einzelnen Parameter vom Typ TestContext.

Regelbeschreibung

Testklassen müssen über einen öffentlichen Konstruktor verfügen, der parameterlos ist oder einen einzelnen TestContext Parameter akzeptiert. Auf diese Weise kann das Testframework die Testklasse ordnungsgemäß instanziieren.

Konstruktoren, die nicht öffentlich sind, Parameter von nicht unterstützten Typen haben oder mehrere Parameter besitzen, sind ungültig und verhindern, dass das Testframework Instanzen der Testklasse erstellt.

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

Wie man Verstöße behebt

Stellen Sie sicher, dass Ihre Testklasse einen gültigen Konstruktor hat. Ein gültiger Konstruktor muss die folgenden Merkmale aufweisen:

  1. Deklariert als public.
  2. Entweder parameterlos oder akzeptiert einen einzelnen TestContext Parameter.

Parameterloser Konstruktor

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

    [TestMethod]
    public void TestMethod()
    {
    }
}

Konstruktor mit TestContext

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

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

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

Impliziter parameterloser Konstruktor

Wenn Sie keinen Konstruktor definieren, generiert der Compiler automatisch einen öffentlichen parameterlosen Konstruktor:

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

Gültige und ungültige Konstruktoren zusammen

Wenn Ihre Testklasse über mehrere Konstruktoren verfügt, muss mindestens eine gültig sein:

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

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnungen von dieser Regel. Testklassen ohne gültige Konstruktoren können nicht vom Testframework instanziiert werden, und die Tests werden nicht ausgeführt.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, setzen Sie dessen Schweregrad auf none in der Konfigurationsdatei fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.