Teilen über


MSTest-Assertionen

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

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:

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:

Bewährte Methoden

  1. Verwenden Sie bestimmte Assertionen: Bevorzugen Sie AreEqual über IsTrue(a == b) für bessere Fehlermeldungen.

  2. Beschreibende Nachrichten einschließen: Helfen Sie beim schnellen Erkennen von Fehlern mit klaren Assertionsmeldungen.

  3. Testen Sie jeweils eine Sache: Jede Testmethode sollte ein einzelnes Verhalten überprüfen.

  4. Verwenden Sie Throws/ThrowsExactly für Ausnahmen: In MSTest v3.8+ sollten Sie Assert.Throws, Assert.ThrowsExactly und deren asynchrone Entsprechungen (ThrowsAsync, ThrowsExactlyAsync) statt des ExpectedException Attributs bevorzugen.

  5. Bevorzugen Sie Assert über StringAssert/CollectionAssert: Wenn in beiden Klassen Funktionalität vorhanden ist, verwenden Sie die Assert Klasse für bessere Auffindbarkeit und Konsistenz.

Die folgenden Analysegeräte tragen dazu bei, die ordnungsgemäße Verwendung von Assertionen sicherzustellen:

  • MSTEST0006 – Vermeiden Sie das ExpectedException-Attribut, und verwenden Sie stattdessen die Assert.Throws-Methoden.
  • MSTEST0017 – Assertionsargumente sollten in der richtigen Reihenfolge übergeben werden.
  • MSTEST0023 - Keine booleschen Aussagen verneinen.
  • MSTEST0025 - Bevorzugen Sie Assert.Fail gegenü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.Throws Methoden.
  • MSTEST0040 – Vermeiden Sie die Verwendung von Assertionen im asynchronen Void-Kontext.
  • MSTEST0046 - Nutzen Sie Assert anstelle von StringAssert.
  • MSTEST0051 - Assert.Throws sollte eine einzelne Anweisung enthalten.
  • MSTEST0053 – Formatparameter vermeiden Assert .
  • MSTEST0058 – Vermeiden Sie Assertions in Catch-Blocks.

Siehe auch