Verwenden von Testbedingungen in SQL Server-Komponententests

 

In einem SQL Server-Komponententest werden ein oder mehrere Transact-SQL-Testskripts ausgeführt. Die Ergebnisse können innerhalb des Transact-SQL-Skripts ausgewertet werden, wobei durch THROW oder RAISERROR zurückgegeben wird, dass ein Fehler aufgetreten bzw. der Test fehlgeschlagen ist. Alternativ können Testbedingungen im Test definiert werden, um die Ergebnisse auszuwerten. Der Test gibt eine Instanz der Klasse SqlExecutionResult zurück. Die Instanz dieser Klasse enthält mindestens ein DataSet, die Ausführungszeit sowie die vom Skript betroffenen Zeilen. Alle diese Informationen werden während der Skriptausführung gesammelt. Diese Ergebnisse können mithilfe von Testbedingungen ausgewertet werden.SQL Server Data Tools stellt eine Reihe von vordefinierten Testbedingungen bereit. Informationen zum Erstellen und Verwenden benutzerdefinierter Bedingungen finden Sie unter Benutzerdefinierte Testbedingungen für SQL Server-Komponententests.

Vordefinierte Testbedingungen

In der folgenden Tabelle sind die vordefinierten Testbedingungen aufgeführt, die Sie im Bereich „Testbedingungen“ des SQL Server-Komponententest-Designers hinzufügen können.

Testbedingung Beschreibung der Testbedingung
Datenprüfsumme Verursacht einen Fehler, wenn die Prüfsumme des vom Transact-SQL-Skript zurückgegebenen Resultsets nicht mit der erwarteten Prüfsumme übereinstimmt. Weitere Informationen finden Sie unter Angeben einer Datenprüfsumme. Note: Wenn Daten zurückgegeben werden, die zwischen den Testläufen variieren, ist diese Testbedingung nicht empfehlenswert. Beispiel: Wenn das Resultset generierte Datumsangaben oder Uhrzeiten bzw. Identitätsspalten enthält, schlagen die Tests fehl, weil die Prüfsummen der jeweiligen Ausführungen unterschiedlich sind.
ResultSet ist leer Verursacht einen Fehler, wenn das vom Transact-SQL-Skript zurückgegebene Resultset nicht leer ist.
Ausführungszeit Verursacht einen Fehler, wenn die Ausführung des Transact-SQL-Testskripts länger als erwartet dauert. Standardmäßig beträgt die Ausführungszeit 30 Sekunden.

Die Ausführungszeit gilt nur für Tests mit dem Testskript und nicht mit dem Vortestskript oder Nachtestskript.
Erwartetes Schema Verursacht einen Fehler, wenn die Spalten und Datentypen des Resultsets nicht mit den für die Testbedingung angegebenen Spalten und Datentypen übereinstimmen. Sie müssen ein Schema in den Eigenschaften der Testbedingung angeben. Weitere Informationen finden Sie unter Angeben eines erwarteten Schemas.
Nicht eindeutig Erzeugt immer einen Test mit dem Ergebnis „Nicht eindeutig“. Dies ist die Standardbedingung, die jedem Test hinzugefügt wird. Diese Testbedingung wird eingeschlossen, um anzuzeigen, dass die Testüberprüfung nicht implementiert wurde. Löschen Sie diese Testbedingung aus dem Test, nachdem Sie weitere Testbedingungen hinzugefügt haben.
ResultSet ist nicht leer Verursacht einen Fehler, wenn das Resultset leer ist. Sie können diese Testbedingung oder ResultSet ist leer mit der Transact-SQL-@@RAISERROR-Funktion im Testskript verwenden, um zu überprüfen, ob ein Update ordnungsgemäß ausgeführt wurde. Beispielsweise können Sie Werte vor dem Update speichern, das Update ausführen, die Werte mit den Ergebnissen nach dem Update vergleichen und einen Fehler auslösen, wenn Sie nicht die erwarteten Ergebnisse erhalten.
Zeilenanzahl Verursacht einen Fehler, wenn das Resultset nicht die erwartete Anzahl von Zeilen enthält.
Skalarwert Verursacht einen Fehler, wenn ein bestimmter Wert im Resultset nicht mit dem angegebenen Wert übereinstimmt.Erwarteter Wert ist standardmäßig NULL.

Hinweis


Mit der Testbedingung Ausführungszeit wird ein Zeitlimit angegeben, das bei der Ausführung des Transact-SQL-Testskripts nicht überschritten werden darf. Wird das Zeitlimit überschritten, schlägt der Test fehl. Die Testergebnisse umfassen auch eine Statistik zur Dauer, die sich von der Testbedingung „Ausführungszeit“ unterscheidet. Die Statistik zur Zeitdauer umfasst neben der Ausführungszeit auch die Zeit für die zweimalige Verbindung mit der Datenbank, die Zeit zur Ausführung anderer Testskripts, z. B. des Vor- und Nachtestskripts, sowie die Zeit zur Ausführung der Testbedingungen. Daher kann ein Test selbst dann erfolgreich verlaufen, wenn die Dauer über der Ausführungszeit liegt.

Die für die Datengenerierung und Schemabereitstellung benötigte Zeit ist nicht in der angegebenen Zeitdauer enthalten, da sie vor der Testausführung liegt. Um die Testdauer anzuzeigen, wählen Sie im Fenster Testergebnisse einen Testlauf aus, klicken mit der rechten Maustaste und wählen Testergebnisdetails anzeigen aus.

Sie können den Bereich Testbedingungen des SQL Server-Komponententest-Designers verwenden, um SQL Server-Komponentetests Testbedingungen hinzuzufügen. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen von Testbedingungen zu SQL Server-Komponententests.

Sie können den Code der Testmethode auch direkt bearbeiten, um weitere Funktionen hinzuzufügen. Weitere Informationen finden Sie unter Vorgehensweise: Öffnen eines SQL Server-Komponententests zur Bearbeitung und Vorgehensweise: Schreiben eines SQL Server-Komponententests, der im Gültigkeitsbereich einer einzelnen Transaktion ausgeführt wird. Beispielsweise können Sie eine Testmethode durch Funktionen erweitern, indem Sie Assert-Anweisungen hinzufügen. Weitere Informationen finden Sie unter Verwenden von Transact-SQL-Assertionen in SQL Server-Komponententests.

Erwartete Fehler

Sie können z. B. SQL Server-Komponententests erstellen, um ein Verhalten zu überprüfen, von dem erwartet wird, dass es nicht erfolgreich ist. Diese erwarteten Fehler werden auch als Negativnachweis bezeichnet. Im Folgenden einige Beispiele:

  • Sicherstellen, dass eine gespeicherte Prozedur zum Löschen von Kundendaten bei Angabe einer ungültigen Kunden-ID fehlschlägt.

  • Sicherstellen, dass eine gespeicherte Prozedur zum Ausführen einer Bestellung fehlschlägt, wenn die Bestellung nie aufgegeben bzw. bereits ausgeführt wurde.

  • Sicherstellen, dass eine gespeicherte Prozedur zum Stornieren von Bestellungen keine abgeschlossenen oder bereits stornierten Bestellungen stornieren kann.

Sie können SQL Server-Komponententests für gespeicherte Prozeduren definieren, die erwartete SQL-Ausnahmen auslösen. Um anzugeben, welche Ausnahmen erwartet werden, können Sie der Komponententestmethode ein Attribut hinzufügen. So verhindern Sie, dass der Test beim Auftreten der Ausnahme fehlschlägt.

Um eine SQL Server-Komponententestmethode mit erwarteten Ausnahmen zu kennzeichnen, fügen Sie das folgende Attribut hinzu:

[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]  

Erläuterungen:

  • nnnnn ist die Nummer der erwarteten Meldung, z. B. 14025.

  • x ist der Schweregrad der erwarteten Ausnahme.

  • y ist der Zustand der erwarteten Ausnahme.

Nicht festgelegte Parameter werden ignoriert. Sie übergeben diese Parameter an die THROW-Anweisung im Datenbankcode. Wenn Sie „MatchFirstError = false“ angeben, werden alle „SqlErrors“ in der Ausnahme vom Attribut verglichen. Das Standardverhalten („MatchFirstError = true“) besteht darin, dass nur der erste aufgetretene Fehler vom Attribut verglichen wird.

Ein Beispiel zur Verwendung erwarteter Ausnahmen und einen negativen SQL Server-Komponententest finden Sie unter Exemplarische Vorgehensweise: Erstellen und Ausführen eines SQL Server-Komponententests.

Angeben einer Prüfsumme

Um den SQL Server-Komponententest-Designer anzuzeigen, doppelklicken Sie im Projektmappen-Explorerauf die Quellcodedatei eines Komponententests.

Nachdem Sie dem Datenbankkomponententest die Testbedingung „Datenprüfsumme“ hinzugefügt haben, müssen Sie die erwartete Prüfsumme mithilfe des folgenden Verfahrens konfigurieren:

So geben Sie eine erwartete Prüfsumme an

  1. Klicken Sie in der Liste mit Testbedingungen auf die Testbedingung „Datenprüfsumme“, für die Sie eine Prüfsumme angeben möchten.

  2. Öffnen Sie das Eigenschaftenfenster durch Drücken von F4. Sie können auch im Menü Ansichtauf Eigenschaftenfenster klicken.

  3. (Optional) Sie können die Eigenschaft (Name) der Testbedingung auch in einen aussagekräftigeren Namen ändern.

  4. Klicken Sie in der Eigenschaft Konfiguration auf die Schaltfläche zum Durchsuchen ().

    Das Dialogfeld Konfiguration für TestConditionName wird angezeigt.

  5. Geben Sie eine Verbindung mit der Datenbank an, die getestet werden soll. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer Datenbankverbindung.

  6. Standardmäßig wird der Transact-SQL-Text des Tests im Bearbeitungsbereich angezeigt. Sie können ggf. den Code ändern, um die erwarteten Ergebnisse zu erzeugen. Wenn im Vortest des Tests z. B. Code enthalten ist, müssen Sie diesen Code u. U. hinzufügen.

    Wichtig


    Wenn Sie eine Prüfsummenbedingung ändern, für die Sie zuvor eine Prüfsumme angegeben hatten, werden die im Bearbeitungsbereich vorgenommenen Änderungen nicht gespeichert. Sie müssen diese Änderungen erneut vornehmen, bevor Sie auf Abrufen klicken.

  7. Klicken Sie auf Abrufen.

    Der Transact-SQL-Code wird für die angegebene Datenbankverbindung ausgeführt, und die Ergebnisse werden im Dialogfeld angezeigt.

  8. Wenn die Ergebnisse mit den erwarteten Testergebnissen übereinstimmen, klicken Sie auf OK. Ändern Sie andernfalls den Transact-SQL-Text, und wiederholen Sie die Schritte 6, 7 und 8, bis die Ergebnisse den Erwartungen entsprechen.

    In der Spalte Wert der Testbedingung wird der Wert der erwarteten Prüfsumme angezeigt.

Angeben eines erwarteten Schemas

Nachdem Sie einem SQL Server-Komponententest die Testbedingung „Erwartetes Schema“ hinzugefügt haben, müssen Sie das erwartete Schema mithilfe des folgenden Verfahrens konfigurieren:

So geben Sie ein erwartetes Schema an

  1. Klicken Sie in der Liste mit Testbedingungen auf die Testbedingung „Erwartetes Schema“, für die Sie ein Schema angeben möchten.

  2. Öffnen Sie das Eigenschaftenfenster durch Drücken von F4. Sie können auch im Menü Ansichtauf Eigenschaftenfenster klicken.

  3. (Optional) Sie können die Eigenschaft (Name) der Testbedingung auch in einen aussagekräftigeren Namen ändern.

  4. Klicken Sie in der Eigenschaft Konfiguration auf die Schaltfläche zum Durchsuchen ().

    Das Dialogfeld Konfiguration für TestConditionName wird angezeigt.

  5. Geben Sie eine Verbindung mit der Datenbank an, die getestet werden soll. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer Datenbankverbindung.

  6. Standardmäßig wird der Transact-SQL-Text des Tests im Bearbeitungsbereich angezeigt. Sie können ggf. den Code ändern, um die erwarteten Ergebnisse zu erzeugen. Wenn im Vortest des Tests z. B. Code enthalten ist, müssen Sie diesen Code u. U. hinzufügen.

    Wichtig


    Wenn Sie eine Bedingung für ein erwartetes Schema ändern, für die Sie zuvor ein Schema angegeben hatten, werden die im Bearbeitungsbereich vorgenommenen Änderungen nicht gespeichert. Sie müssen diese Änderungen erneut vornehmen, bevor Sie auf Abrufen klicken.

  7. Klicken Sie auf Abrufen.

    Der Transact-SQL-Code wird für die angegebene Datenbankverbindung ausgeführt, und die Ergebnisse werden im Dialogfeld angezeigt. Da Sie das Schema bzw. die Form des Resultsets und nicht die Werte der Ergebnisse überprüfen, müssen keine Daten in den zurückgegebenen Ergebnissen angezeigt werden, solange die Spalten in der erwarteten Weise dargestellt werden.

  8. Wenn die Ergebnisse mit den erwarteten Testergebnissen übereinstimmen, klicken Sie auf OK. Ändern Sie andernfalls den Transact-SQL-Text, und wiederholen Sie die Schritte 6, 7 und 8, bis die Ergebnisse den Erwartungen entsprechen.

    In der Spalte Wert der Testbedingung werden Informationen zum erwarteten Schema angezeigt. Beispielsweise könnte "Erwartet: 2 Tabellen" angezeigt werden.

Erweiterbare Testbedingungen

Neben den sechs vordefinierten Testbedingungen können Sie eigene neue Testbedingungen erstellen. Diese Testbedingungen werden im Bereich „Testbedingungen“ des SQL Server-Komponententest-Designers angezeigt. Weitere Informationen finden Sie unter Benutzerdefinierte Testbedingungen für SQL Server-Komponententests.

Siehe auch

Erstellen und Definieren von SQL Server-Komponententests
Verwenden von Transact-SQL-Assertionen in SQL Server-Komponententests
Skripts in SQL Server-Komponententests