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 | MSTEST0062 |
| Title | Vermeiden Sie out- und ref-Parameter in Testmethoden |
| 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 | Yes |
Ursache
Eine Testmethode weist Parameter auf, die mit out Oder ref Modifizierern gekennzeichnet sind.
Regelbeschreibung
Testmethoden sollten keine out oder ref Parameter enthalten. MSTest ist für das Aufrufen von Testmethoden verantwortlich und liest niemals die Werte, die nach Abschluss der Testmethode durch Verweis übergeben werden. Diese Modifizierer sind irreführend, da sie vorschlagen, dass die Testmethode Werte zurückgibt, die verwendet werden, aber MSTest verwendet sie nie nach Abschluss des Tests.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod(out string s, ref string s2) // Violation
{
s = "test";
}
}
Wie man Verstöße behebt
Entfernen Sie die Modifizierer out und ref aus den Parametern der Testmethode.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
// Test code
}
}
Wenn Sie Methoden mit out oder ref Parametern testen müssen, rufen Sie sie in Ihrer Testmethode auf:
[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);
}
}
Für datengesteuerte Tests:
[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);
}
}
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnungen von dieser Regel. Es gibt kein gültiges Szenario, in dem Testmethoden out- oder ref-Parameter verwenden sollen.
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 MSTEST0062
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0062
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.MSTEST0062.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.