Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Verwenden Sie die Assert-Klassen des Microsoft.VisualStudio.TestTools.UnitTesting-Namespace, um bestimmte Funktionen zu überprüfen. Eine Testmethode führt den Code in Ihrer Anwendung aus, meldet jedoch die Richtigkeit nur, wenn Sie Anweisungen einschließen Assert.
Überblick
MSTest stellt drei Assertionsklassen bereit:
| Class | Zweck |
|---|---|
Assert |
Allgemeine Assertionen für Werte, Typen und Ausnahmen. |
StringAssert |
Zeichenfolgenspezifische Assertionen für Muster, Teilzeichenfolgen und Vergleiche. |
CollectionAssert |
Sammlungs assertionen zum Vergleichen und Validieren von Sammlungen. |
Tipp
Wenn die Funktionalität sowohl in AssertStringAssert/CollectionAssert als auch in der Assert Klasse vorhanden ist, bevorzugen Sie die Assert Klasse. Die Assert Klasse bietet eine bessere Auffindbarkeit und ist die empfohlene Wahl für neuen Code.
StringAssert und CollectionAssert werden aus Gründen der Abwärtskompatibilität beibehalten.
Alle Assertionsmethoden akzeptieren einen optionalen Meldungsparameter, der angezeigt wird, wenn die Assertion fehlschlägt, und hilft Ihnen dabei, die Ursache zu identifizieren:
Assert.AreEqual(expected, actual, "Values should match after processing");
Die Assert-Klasse
Verwenden Sie die Assert-Klasse, um zu überprüfen, ob sich der Testcode erwartungsgemäß verhält.
Allgemeine Assertionsmethoden
[TestMethod]
public async Task AssertExamples()
{
// Equality
Assert.AreEqual(5, calculator.Add(2, 3));
Assert.AreNotEqual(0, result);
// Reference equality
Assert.AreSame(expected, actual);
Assert.AreNotSame(obj1, obj2);
// Boolean conditions
Assert.IsTrue(result > 0);
Assert.IsFalse(string.IsNullOrEmpty(name));
// Null checks
Assert.IsNull(optionalValue);
Assert.IsNotNull(requiredValue);
// Type checks
Assert.IsInstanceOfType<IDisposable>(obj);
Assert.IsNotInstanceOfType<string>(obj);
// Exception testing (MSTest v3.8+)
Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
await Assert.ThrowsExactlyAsync<InvalidOperationException>(
async () => await service.ProcessAsync());
}
Verfügbare APIs
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreNotSame
- Assert.AreSame
- Assert.Contains
- Assert.ContainsSingle
- Assert.DoesNotContain
- Assert.DoesNotEndWith
- Assert.DoesNotMatchRegex
- Assert.DoesNotStartWith
- Assert.Fail
- Assert.HasCount
- Assert.Inconclusive
- Assert.IsEmpty
- Assert.IsFalse
- Assert.IsGreaterThan
- Assert.IsGreaterThanOrEqualTo
- Assert.IsInRange
- Assert.IsInstanceOfType
- Assert.IsLessThan
- Assert.IsLessThanOrEqualTo
- Assert.IsNegative
- Assert.IsNotEmpty
- Assert.IsNotInstanceOfType
- Assert.IsNotNull
- Assert.IsNull
- Assert.IsPositive
- Assert.IsTrue
- Assert.MatchesRegex
- Assert.StartsWith
- Assert.Throws
- Assert.ThrowsAsync
- Assert.ThrowsExactly
- Assert.ThrowsExactlyAsync
Die StringAssert-Klasse
Verwenden Sie die Klasse StringAssert, um Zeichenfolgen zu vergleichen und zu überprüfen.
Hinweis
Alle StringAssert Methoden verfügen über Entsprechungen in der Assert Klasse. Bevorzugen Sie die Assert Methoden zur besseren Auffindbarkeit. Die StringAssert Klasse wird aus Gründen der Abwärtskompatibilität beibehalten.
Verfügbare APIs sind:
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
Die CollectionAssert-Klasse
Verwenden Sie die Klasse CollectionAssert, um Objektsammlungen zu vergleichen und den Zustand einer Sammlung zu überprüfen.
Hinweis
Wenn eine entsprechende Methode in der Assert-Klasse vorhanden ist (z. B. Assert.Contains, Assert.DoesNotContain), sollten Sie vorzugsweise Assert verwenden, um eine bessere Auffindbarkeit zu gewährleisten. Die CollectionAssert Klasse wird hauptsächlich aus Gründen der Abwärtskompatibilität verwaltet.
Verfügbare APIs sind:
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
Bewährte Methoden
Verwenden Sie bestimmte Assertionen: Bevorzugen Sie
AreEqualüberIsTrue(a == b)für bessere Fehlermeldungen.Beschreibende Nachrichten einschließen: Helfen Sie beim schnellen Erkennen von Fehlern mit klaren Assertionsmeldungen.
Testen Sie jeweils eine Sache: Jede Testmethode sollte ein einzelnes Verhalten überprüfen.
Verwenden Sie
Throws/ThrowsExactlyfür Ausnahmen: In MSTest v3.8+ sollten SieAssert.Throws,Assert.ThrowsExactlyund deren asynchrone Entsprechungen (ThrowsAsync,ThrowsExactlyAsync) statt desExpectedExceptionAttributs bevorzugen.Bevorzugen Sie
AssertüberStringAssert/CollectionAssert: Wenn in beiden Klassen Funktionalität vorhanden ist, verwenden Sie dieAssertKlasse für bessere Auffindbarkeit und Konsistenz.
Verwandte Analysegeräte
Die folgenden Analysegeräte tragen dazu bei, die ordnungsgemäße Verwendung von Assertionen sicherzustellen:
-
MSTEST0006 – Vermeiden Sie das
ExpectedException-Attribut, und verwenden Sie stattdessen dieAssert.Throws-Methoden. - MSTEST0017 – Assertionsargumente sollten in der richtigen Reihenfolge übergeben werden.
- MSTEST0023 - Keine booleschen Aussagen verneinen.
-
MSTEST0025 - Bevorzugen Sie
Assert.Failgegenüber immer falschen Bedingungen. - MSTEST0026 – Assertionsargumente sollten bedingten Zugriff vermeiden.
- MSTEST0032 – Überprüfen Sie immer wahre Assertions.
- MSTEST0037 – Verwenden Sie die richtigen Assert-Methoden.
- MSTEST0038 – Vermeiden Sie die Verwendung von Werttypen.
-
MSTEST0039 – Verwenden Sie neuere
Assert.ThrowsMethoden. - MSTEST0040 – Vermeiden Sie die Verwendung von Assertionen im asynchronen Void-Kontext.
-
MSTEST0046 - Nutzen Sie
Assertanstelle vonStringAssert. -
MSTEST0051 -
Assert.Throwssollte eine einzelne Anweisung enthalten. -
MSTEST0053 – Formatparameter vermeiden
Assert. - MSTEST0058 – Vermeiden Sie Assertions in Catch-Blocks.