Freigeben über


Verwenden der Assert-Klassen

Verwenden Sie die Assert-Klassen des UnitTestingFramework-Namespace, um bestimmte Funktionen zu überprüfen. Eine Komponententestmethode führt den Code einer Methode in Ihrem Entwicklungscode aus. Es werden jedoch nur dann Berichte über Aspekte des Codeverhaltens zurückgegeben, wenn Sie vor dem Test Assert-Anweisungen hinzugefügt haben.

Tipp

Komponententests können mit oder ohne Assert-Anweisungen Codeabdeckungsdaten generieren. Weitere Informationen finden Sie unter Gewusst wie: Erfassen von Codeabdeckungsdaten.

Arten von Assert-Klassen

Der Microsoft.VisualStudio.TestTools.UnitTesting-Namespace stellt mehrere Arten von Assert-Klassen bereit:

Assert

In Ihrer Testmethode können Sie beliebig viele Methoden der Assert-Klasse aufrufen, z. B. Assert.AreEqual(). Die Assert-Klasse stellt eine Vielzahl von Methoden bereit, für die in vielen Fällen mehrere Überladungen vorhanden sind.

CollectionAssert

Verwenden Sie die CollectionAssert-Klasse, um Objektauflistungen zu vergleichen und den Zustand einer oder mehrerer Auflistungen zu überprüfen.

StringAssert

Verwenden Sie die StringAssert-Klasse, um Zeichenfolgen zu vergleichen. Diese Klasse enthält eine Vielzahl nützlicher Methoden, z. B. StringAssert.Contains, StringAssert.Matches oder StringAssert.StartsWith.

AssertFailedException

Die AssertFailedException-Ausnahme wird immer dann ausgelöst, wenn ein Test fehlschlägt. Ein Test schlägt fehl, wenn eine Zeitüberschreitung auftritt, eine unerwartete Ausnahme ausgelöst wird oder der Test eine Assert-Anweisung enthält, die zum Ergebnis Fehler führt.

AssertInconclusiveException

Die AssertInconclusiveException wird immer dann ausgelöst, wenn ein Test das Ergebnis Nicht eindeutig erzeugt. In der Regel fügen Sie einem Test für die Dauer der Testentwicklung eine Assert.Inconclusive-Anweisung hinzu, um anzuzeigen, dass der Test noch nicht zur Ausführung bereit ist.

Tipp

Eine andere Möglichkeit besteht darin, einen noch nicht zur Ausführung geeigneten Test mit dem Ignore-Attribut zu kennzeichnen. Dies hat jedoch den Nachteil, dass Berichte zur Anzahl der noch zu implementierenden Tests nur noch mit einigem Aufwand generiert werden können.

UnitTestAssertException

Wenn Sie eine neue Assert-Ausnahmeklasse schreiben, kann die Ausnahme leichter als Assert-Fehler erkannt werden, wenn die Klasse von der Basisklasse UnitTestAssertException erbt. Andernfalls lassen sich Assert-Ausnahmen nicht eindeutig von unerwarteten Ausnahmen unterscheiden, die ggf. durch Ihren Test- oder Produktionscode ausgelöst werden.

ExpectedExceptionAttribute

Ergänzen Sie eine Testmethode durch das ExpectedExceptionAttribute-Attribut, wenn die Testmethode überprüfen soll, ob eine Ausnahme wie erwartet durch eine Methode in Ihrem Entwicklungscode ausgelöst wird.

Überladen unsicherer Typen mit Assert.AreEqual

Die Assert.AreEqual-Methode verfügt über eine Vielzahl von Überladungen zum Vergleichen spezifischer Datentypen. Die Assert.AreEqual-Methode besitzt jedoch keine Überladung für unsichere Typen, z. B. den Zeigerdatentyp.

Um dies zu verdeutlichen, erstellen Sie eine C#-Konsolenanwendung, die folgende Klasse enthält:

unsafe public class CUnsafeTest
{
    private int* m_pX = null;
    unsafe public void VoidPtr(void* voidPtr)
    {
    }
    unsafe public int* ReturnPointer(float* fPtr, TestThis* pTestThis)
    {
        int x = 5;
        return &x;
    }
}

Generieren Sie nun Tests für die CunsafeTest-Klasse. Es wird ein Code ähnlich dem folgenden Beispiel generiert:

[TestMethod()]
public void ReturnPointerTest()
{
    unsafe
    {
        CodeGen.BVT.Unsafe.CUnsafeTest target;
        target = new CodeGen.BVT.Unsafe.CUnsafeTest();
        //  TODO: Initialize to an appropriate value
        System.Single* fPtr = null;
        //  TODO: Initialize to an appropriate value
        TestThis* pTestThis = null;
        //  TODO: Initialize to an appropriate value
        System.Int32* expected = null;
        System.Int32* actual;
        actual = target.ReturnPointer(fPtr, pTestThis);
        Assert.AreEqual(actual, expected);
            // On the preceding line, no overload is available. 
    }
}

In diesem Fall sollten Sie die Assert.AreEqual-Anweisung durch Ihren eigenen, benutzerdefinierten Überprüfungscode ersetzen.

Siehe auch

Referenz

Microsoft.VisualStudio.TestTools.UnitTesting

Konzepte

Erstellen und Ausführen von Komponententests für vorhandenen Code