Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In einem SQL Server-Komponententest wird mindestens ein Transact-SQL-Testskript ausgeführt. Die Ergebnisse können innerhalb des Transact-SQL Skripts THROW ausgewertet und RAISERROR verwendet werden, um einen Fehler zurückzugeben und den Test fehlschlagen zu lassen. Alternativ können Testbedingungen im Test definiert werden, um die Ergebnisse auszuwerten. Der Test gibt eine Instanz der SqlExecutionResult-Klasse zurück. Die Instanz dieser Klasse enthält ein oder mehrere DataSets, die Ausführungszeit und die zeilen, die vom Skript betroffen sind. Alle diese Informationen werden während der Ausführung des Skripts gesammelt. Diese Ergebnisse können mithilfe von Testbedingungen ausgewertet werden. SQL Server Data Tools stellt eine Reihe vordefinierter Testbedingungen bereit. Sie können auch benutzerdefinierte Bedingungen erstellen und verwenden; siehe benutzerdefinierte Testbedingungen für SQL Server-Komponententests.
Vordefinierte Testbedingungen
In der folgenden Tabelle sind die vordefinierten Testbedingungen aufgeführt, die Sie mithilfe des Bereichs "Testbedingungen" im SQL Server Unit Test Designer hinzufügen können.
| Versuchsbedingung | Beschreibung der Testbedingung |
|---|---|
| Datenprüfsumme | Schlägt fehl, 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. Anmerkung: Diese Testbedingung wird nicht empfohlen, wenn Sie Daten zurückgeben, die zwischen Testläufen variieren. Wenn Ihr Resultset z. B. generierte Datums- oder Uhrzeitangaben enthält oder Identitätsspalten enthält, schlagen die Tests fehl, da die Prüfsumme bei jeder Ausführung unterschiedlich ist. |
| Leeres Result-Set | Schlägt fehl, wenn das vom Transact-SQL Skript zurückgegebene Resultset nicht leer ist. |
| Ausführungszeit | Schlägt fehl, wenn das Transact-SQL Testskript länger als erwartet ausgeführt werden muss. Die Standardausführungszeit beträgt 30 Sekunden. Die Ausführungszeit gilt nur für den Testskripttest, nicht für das Skript vor dem Test oder für das Skript nach dem Test. |
| Erwartetes Schema | Schlägt fehl, wenn die Spalten und Datentypen des Resultsets nicht mit denen übereinstimmen, die für die Testbedingung angegeben sind. Sie müssen ein Schema über die Eigenschaften der Testbedingung angeben. Weitere Informationen finden Sie unter Angeben eines erwarteten Schemas. |
| Nicht eindeutig | Erzeugt immer einen Test mit einem Ergebnis von "Inconclusive". Dies ist die Standardbedingung, die jedem Test hinzugefügt wird. Diese Testbedingung ist enthalten, um anzugeben, dass die Testüberprüfung nicht implementiert wurde. Löschen Sie diese Testbedingung aus Ihrem Test, nachdem Sie andere Testbedingungen hinzugefügt haben. |
| Nicht leeres ResultSet | Schlägt fehl, wenn das Resultset leer ist. Sie können diese Testbedingung oder das EmptyResultSet mit der funktion Transact-SQL @@RAISERROR in Ihrem Testskript verwenden, um zu testen, ob ein Update ordnungsgemäß funktioniert hat. Sie können beispielsweise Voraktualisierungswerte speichern, das Update ausführen, die Werte nach dem Update vergleichen und einen Fehler auslösen, wenn Sie die erwarteten Ergebnisse nicht erhalten. |
| Zeilenanzahl | Schlägt fehl, wenn das Resultset nicht die erwartete Anzahl von Zeilen enthält. |
| Skalarwert | Schlägt fehl, wenn ein bestimmter Wert im Resultset nicht dem angegebenen Wert entspricht. Der Standardwert erwartet ist NULL. |
Die Ausführungszeittestbedingung gibt einen Zeitgrenzwert an, unter dem das Transact-SQL Testskript ausgeführt werden muss. Wenn dieses Zeitlimit überschritten wird, schlägt der Test fehl. Zu den Testergebnissen gehört auch eine Dauerstatistik, die sich von der Ausführungszeit-Testbedingung unterscheidet. Die Dauerstatistik enthält nicht nur die Ausführungszeit, sondern auch die Zeit für die zweimale Verbindung mit der Datenbank. die Zeit, um andere Testskripts auszuführen, z. B. das Skript vor dem Test und das Post-Test-Skript; und die Zeit zum Ausführen der Testbedingungen. Daher kann ein Test auch dann bestehen, wenn seine Dauer länger als die Ausführungszeit ist.
Die gemeldete Dauer enthält keine Zeit, die für die Datengenerierung und die Schemabereitstellung verwendet wird, da sie vor der Ausführung der Tests auftreten. Um die Testdauer anzuzeigen, wählen Sie im Fenster " Testergebnisse " einen Testlauf aus, klicken Sie mit der rechten Maustaste, und wählen Sie " Testergebnisse anzeigen" aus.
Sie können Testbedingungen zu SQL Server-Komponententests hinzufügen, indem Sie den Bereich "Testbedingungen" des SQL Server-Komponententest-Designers verwenden. Weitere Informationen finden Sie unter Wie man Testbedingungen zu SQL Server-Unit-Tests hinzufügt.
Sie können ihren Testmethodencode auch direkt bearbeiten, um weitere Funktionen hinzuzufügen. Weitere Informationen finden Sie unter Anleitung: SQL Server Komponententest zum Bearbeiten öffnen und Anleitung: SQL Server Komponententest schreiben, der innerhalb des Umfangs einer einzigen Transaktion läuft. Beispielsweise können Sie einer Testmethode Funktionen hinzufügen, 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 SQL Server-Komponententests erstellen, um das Verhalten zu testen, das nicht erfolgreich sein sollte. Diese erwarteten Fehler werden manchmal als negative Tests bezeichnet. Einige Beispiele wären:
- Stellen Sie sicher, dass eine gespeicherte Prozedur, die die Daten eines Kunden löscht, fehlschlägt, wenn Sie eine ungültige Kunden-ID angeben.
- Überprüfen Sie, ob eine gespeicherte Prozedur, die eine Bestellung ausfüllt, fehlschlägt, wenn die Bestellung nie aufgegeben wurde oder ob die Bestellung bereits ausgefüllt wurde.
- Überprüfen Sie, ob eine gespeicherte Prozedur, die eine Bestellung storniert, keine abgeschlossenen Bestellungen oder Bestellungen stornieren kann, die bereits storniert wurden.
Sie können SQL Server-Komponententests für gespeicherte Prozeduren definieren, die erwartete Ausnahmen auslösen. Sie können der Komponententestmethode ein Attribut hinzufügen, um anzugeben, welche Ausnahme oder Ausnahmen erwartet werden. Dadurch verhindern Sie, dass der Test fehlschlägt, wenn die Ausnahme auftritt.
Um eine SQL Server-Komponententestmethode mit erwarteten Ausnahmen zu markieren, fügen Sie das folgende Attribut hinzu:
[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]
Ort:
- nnnn ist die Anzahl der erwarteten Nachricht, z. B. 14025
- x ist der Schweregrad der erwarteten Ausnahme.
- y ist der Status der erwarteten Ausnahme.
Alle nicht angegebenen Parameter werden ignoriert. Sie übergeben diese Parameter an die THROW Anweisung im Datenbankcode. Wenn Sie MatchFirstError = false angeben, stimmt das Attribut mit einem der SqlErrors in der Ausnahme überein. Das Standardverhalten (MatchFirstError = true) entspricht nur dem ersten fehler, der auftritt.
Ein Beispiel für die Verwendung erwarteter Ausnahmen und eines negativen SQL Server-Komponententests finden Sie unter Walkthrough: Create and run a SQL Server unit test.
Geben Sie eine Datenprüfsumme an
Um den SQL Server Unit Test Designer anzuzeigen, doppelklicken Sie im Projektmappen-Explorer auf die Quellcodedatei für Komponententests.
Nachdem Sie ihrem Datenbankeinheitstest eine Prüfsummentestbedingung hinzugefügt haben, müssen Sie die erwartete Prüfsumme mithilfe des folgenden Verfahrens konfigurieren:
Angeben einer erwarteten Prüfsumme
Wählen Sie in der Liste der Testbedingungen die Prüfsummentestbedingung aus, für die Sie eine Prüfsumme angeben möchten.
Öffnen Sie das Eigenschaftenfenster , indem Sie F4 drücken. Sie können auch das Menü "Ansicht" öffnen und "Eigenschaftenfenster " auswählen.
(Optional) Möglicherweise möchten Sie die Eigenschaft (Name) der Testbedingung beschreibender ändern.
Wählen Sie in der Konfigurationseigenschaft die Schaltfläche zum Durchsuchen (...) aus.
Das Dialogfeld "Konfiguration für TestConditionName " wird angezeigt.
Geben Sie eine Verbindung mit der Datenbank an, die Sie testen möchten. Weitere Informationen finden Sie unter How to: Create a Database Connection.
Standardmäßig wird der Transact-SQL Textkörper Ihres Tests im Bearbeitungsbereich angezeigt. Sie können den Code bei Bedarf ändern, um die erwarteten Ergebnisse zu erzielen. Wenn Ihr Test beispielsweise Code im Vorabtest enthält, müssen Sie diesen Code möglicherweise hinzufügen.
Von Bedeutung
Wenn Sie eine Prüfsummenbedingung ändern, für die Sie zuvor eine Prüfsumme angegeben haben, werden alle im Bearbeitungsbereich vorgenommenen Änderungen nicht gespeichert. Sie müssen diese Änderungen erneut vornehmen, bevor Sie "Abrufen" auswählen.
Wählen Sie "Abrufen" aus.
Die Transact-SQL wird für die angegebene Datenbankverbindung ausgeführt, und die Ergebnisse werden im Dialogfeld angezeigt.
Wenn die Ergebnisse den erwarteten Ergebnissen ihres Tests entsprechen, wählen Sie "OK" aus. Ändern Sie andernfalls den Transact-SQL Textkörper, und wiederholen Sie die Schritte 6, 7 und 8, bis die Ergebnisse erwartungsgemäß sind.
In der Spalte "Wert " der Testbedingung wird der Wert der erwarteten Prüfsumme angezeigt.
Angeben eines erwarteten Schemas
Nachdem Sie dem SQL Server-Komponententest eine Erwartete Schematestbedingung hinzugefügt haben, müssen Sie das erwartete Schema mithilfe des folgenden Verfahrens konfigurieren:
Angeben des erwarteten Schemas
Wählen Sie in der Liste der Testbedingungen die Bedingung für den erwarteten Schematest aus, für die Sie ein Schema angeben möchten.
Öffnen Sie das Eigenschaftenfenster , indem Sie F4 drücken. Sie können auch das Menü "Ansicht" öffnen und das Fenster "Eigenschaften " auswählen.
(Optional) Möglicherweise möchten Sie die Eigenschaft (Name) der Testbedingung beschreibender ändern.
Wählen Sie in der Konfigurationseigenschaft die Schaltfläche zum Durchsuchen (...) aus.
Das Dialogfeld "Konfiguration für TestConditionName " wird angezeigt.
Geben Sie eine Verbindung mit der Datenbank an, die Sie testen möchten. Weitere Informationen finden Sie unter How to: Create a Database Connection.
Standardmäßig wird der Transact-SQL Textkörper Ihres Tests im Bearbeitungsbereich angezeigt. Sie können den Code bei Bedarf ändern, um die erwarteten Ergebnisse zu erzielen. Wenn Ihr Test beispielsweise Code im Vorabtest enthält, müssen Sie diesen Code möglicherweise hinzufügen.
Von Bedeutung
Wenn Sie eine erwartete Schemabedingung ändern, für die Sie zuvor ein Schema angegeben haben, werden alle Änderungen, die Sie im Bearbeitungsbereich vorgenommen haben, nicht gespeichert. Sie müssen diese Änderungen erneut vornehmen, bevor Sie "Abrufen" auswählen.
Wählen Sie "Abrufen" aus.
Die Transact-SQL wird für die angegebene Datenbankverbindung ausgeführt, und die Ergebnisse werden im Dialogfeld angezeigt. Da Sie das Schema oder die Form des Resultsets und nicht der Werte der Ergebnisse überprüfen, müssen Sie keine Daten in den zurückgegebenen Ergebnissen sehen, solange die Spalten wie erwartet angezeigt werden.
Wenn die Ergebnisse den erwarteten Ergebnissen ihres Tests entsprechen, wählen Sie "OK" aus. Ändern Sie andernfalls den Transact-SQL Textkörper, und wiederholen Sie die Schritte 6, 7 und 8, bis die Ergebnisse erwartungsgemäß sind.
In der Spalte "Wert " der Testbedingung werden Informationen zum erwarteten Schema angezeigt. Beispielsweise könnte es "Erwartet: 2 Tabellen" sagen.
Erweiterbare Testbedingungen
Zusätzlich zu den sechs vordefinierten Testbedingungen können Sie neue Testbedingungen selbst schreiben. Diese Testbedingungen werden im Bereich "Testbedingungen" des SQL Server-Komponententest-Designers angezeigt. Weitere Informationen finden Sie unter benutzerdefinierte Testbedingungen für SQL Server-Komponententests.