Gewusst wie: Erstellen eines datengesteuerten Komponententests

Die Microsoft-Komponententestframeworks für verwalteten Code verwenden, können Sie eine Komponententestmethode einrichten zum Abrufen von Werten in der Testmethode aus einer Datenquelle verwendet.Methode ist nacheinander für jede Zeile in der Datenquelle ausgeführt, wodurch eine Vielzahl von Eingaben zu testen, indem Sie eine einzelne Methode erleichtert.

Dieses Thema enthält folgende Abschnitte:

Erstellen eines datengesteuerten Komponententests umfasst die folgenden Schritte aus:

  1. Erstellen Sie eine Datenquelle, die die Werte enthält, die Sie in der Testmethode verwenden.Die Datenquelle kann beliebigen Typs sein, die auf dem Computer registriert ist, die der Test ausgeführt wird.

  2. Fügen Sie eine Private TestContext Feld und einer öffentlichen TestContext -Eigenschaft, um die Test-Klasse.

  3. Eine Komponententestmethode erstellen und Hinzufügen einer DataSourceAttribute -Attribut auf sie.

  4. Verwenden Sie die DataRow Indexer-Eigenschaft, um die Werte abzurufen, die Sie in einem Test verwenden.

Die zu testende Methode

Als Beispiel nehmen wir an, dass wir erstellt haben:

  1. Eine Lösung namens MyBank , die akzeptiert und verarbeitet die Transaktionen für verschiedene Arten von Konten.

  2. Ein Projekt in MyBank namens BankDb , verwaltet die Buchungen für Konten.

  3. Eine Klasse namens Maths in der DbBank Projekt, das führt die mathematischen Funktionen, um sicherzustellen, dass jede Transaktion an die Bank vorteilhaft ist.

  4. Ein Komponententest Projekt namens BankDbTests So testen Sie das Verhalten der BankDb Komponente.

  5. Komponententest-Klasse namens MathsTests um zu überprüfen, das Verhalten der Maths Klasse.

Wir testen eine Methode in Maths , die zwei ganze Zahlen mit einer Schleife hinzufügt:

public int AddIntegers(int first, int second)
{
    int sum = first;
    for( int i = 0; i < second; i++)
    {
        sum += 1;
    }
    return sum;
}

Erstellen einer Datenquelle

So testen Sie die AddIntegers -Methode, erstellen wir eine Datenquelle, die gibt einen Bereich von Werten für die Parameter und die Summe, die Sie erwarten, die zurückgegeben werden.In unserem Beispiel erstellen wir eine Sql-Compact-Datenbank mit dem Namen MathsData und eine Tabelle namens AddIntegersData , enthält die folgenden Spaltennamen und Werte

FirstNumber

SecondNumber

Sum

0

1

1

1

1

2

2

-3

-1

Die Testklasse hinzufügen eine TestContext

Komponententestframeworks erstellt ein TestContext Objekt, um die Datenquelleninformationen für einen datengesteuerten Test zu speichern.Rahmen legt dieses Objekt dann als Wert für die TestContext -Eigenschaft, die wir erstellen.

    private TestContext testContextInstance;
    public TestContext TestContext
    {
        get { return testContextInstance; }
        set { testContextInstance = value; }
    }

In Ihrer Testmethode Sie den Datenzugriff durch die DataRow Indexereigenschaft für die TestContext.

Schreiben die Test-Methode

Die Testmethode für AddIntegers ist relativ einfach.Rufen Sie für jede Zeile in der Datenquelle, wir AddIntegers mit der FirstNumber und SecondNumber Spalte Werte als Parameter ein, und wir überprüfen den Rückgabewert mit Summe der Wert den Spalte:


    [DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0; Data Source=C:\Data\MathsData.sdf;", "Numbers")]
    [TestMethod()]
    public void AddIntegers_FromDataSourceTest()
    {
        var target = new Maths();
        
        // Access the data
        int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
        int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]); 
        int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
        int actual = target.IntegerMethod(x, y);
        Assert.AreEqual(expected, actual,
            "x:<{0}> y:<{1}>",
            new object[] {x, y});

    }

Beachten Sie, dass die Assert -Methode enthält eine Nachricht, die zeigt die x und y Werte einer fehlgeschlagenen Iteration.Standardmäßig werden die geltend gemachten Werte expected und actual, sind in den Details einer fehlgeschlagenen Test bereits enthalten.

ms182527.collapse_all(de-de,VS.110).gifAngeben von DataSourceAttribute

Die DataSource Attribut gibt die Verbindungszeichenfolge für die Datenquelle und den Namen der Tabelle, die Sie verwenden in der Testmethode.Die genauen Informationen in der Verbindungszeichenfolge unterscheiden sich je nach verwendetem Datenquellentyp.In diesem Beispiel haben wir eine SqlServerCe-Datenbank verwendet.

    [DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0;Data Source=C:\Data\MathsData.sdf", "AddIntegersData")]

Das DataSource-Attribut hat drei Konstruktoren.

[DataSource(dataSourceSettingName)]

Ein Konstruktor mit einem Parameter verwendet die Verbindungsinformationen, die in der Datei app.config für die Projektmappe gespeichert ist.Die DataSourceSettingsName ist der Name des Xml-Elements in der Config-Datei, die die Verbindungsinformationen angibt.

Verwenden eine app.config-Datei können Sie den Speicherort der Datenquelle zu ändern, ohne Änderungen an den Komponententest selbst.Informationen zum Erstellen und verwenden eine app.config-Datei finden Sie unterExemplarische Vorgehensweise: Verwenden einer Konfigurationsdatei zum Definieren einer Datenquelle

[DataSource(connectionString, tableName)]

Die DataSource -Konstruktor mit zwei Parametern gibt die Verbindungszeichenfolge für die Datenquelle und den Namen der Tabelle, die die Daten für die Testmethode enthält.

Die Verbindungszeichenfolgen hängen vom Typ der Datenquelle, aber es sollte ein Provider-Element, der angibt, der Invariante Name des Datenanbieters enthalten.

[DataSource(
    dataProvider, 
    connectionString, 
    tableName,
    dataAccessMethod
    )]

ms182527.collapse_all(de-de,VS.110).gifTestContext.DataRow verwenden für den Datenzugriff

Zugriff auf die Daten in der AddIntegersData anzeigen zu lassen, verwenden Sie die TestContext.DataRow Indexer.DataRowist ein DataRow -Objekt, so dass wir durch den Index oder Spaltennamen Spaltenwerte abrufen.Da die Werte als Objekte zurückgegeben werden, müssen wir sie in den entsprechenden Typ zu konvertieren:

int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);

Ausführen der Tests und Anzeigen der Ergebnisse

Wenn Sie fertig sind, schreiben eine Testmethode, erstellen Sie das Testprojekt.Die Testmethode wird im Fenster "Explorer testen" in der Tests nicht ausführen Gruppe.Beim Ausführen, schreiben und die Tests erneut ausführen, Test Explorer zeigt die Ergebnisse in Gruppen von Tests fehlgeschlagen, Tests übergeben, und Tests nicht ausführen.Sie können Alles alle Tests ausführen, oder wählen ausführen... eine Teilmenge der auszuführenden Tests auswählen.

Die Test Ergebnisse Leiste am oberen Rand der Explorer wird animiert, während der Test ausgeführt wird.Am Ende des Testlaufs wird die Bar betragen grün, wenn alle Tests erfolgreich bestanden wurden oder Rot, wenn einer der Tests fehlgeschlagen sind.Klicken Sie im Detailbereich am unteren Rand das Testen von Explorer-Fenster wird eine Zusammenfassung des Testlaufs angezeigt.Wählen Sie einen Test, um die Details des Tests im unteren Bereich anzeigen.

Wenn Sie ausgeführt haben die AddIntegers_FromDataSourceTest Methode in unserem Beispiel die Ergebnisse Bar Rot und die Testmethode wird verschoben, um die Tests fehlgeschlagen ein datengesteuerter Test fehlschlägt, wenn iterierte Methoden aus den Daten fehlschlägt Quelle.Wenn Sie eine fehlgeschlagene datengesteuerten Tests im Fenster Test-Explorer auswählen, zeigt der Detailbereich die Ergebnisse jeder Iteration, die durch den Zeilenindex Daten identifiziert wird.In unserem Beispiel, es scheint, dass die AddIntegers Algorithmus verarbeitet negative Werte nicht korrekt.

Wann wird die zu testende Methode korrigiert und den Test erneut ausführen, Ergebnisse-Bar wird grün, und die Testmethode wird verschoben, um die Testen übergeben Gruppe.

Siehe auch

Referenz

Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

Microsoft.VisualStudio.TestTools.UnitTesting.TestContext

TestContext.DataRow

Microsoft.VisualStudio.TestTools.UnitTesting.Assert

Konzepte

Überprüfen von Code mithilfe von Komponententests

Schreiben von Komponententests für .NET Framework mit dem Microsoft-Komponententestframework für verwalteten Code

Weitere Ressourcen

Gewusst wie: Erstellen und Ausführen eines Komponententests

Ausführen von Komponententests mit dem Test-Explorer