Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| 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:
- Deklariert als
public. - 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.