Ja, Sie sollten die gesamte Ereigniskette als Einheit testen. In Ihrem Beispiel mit einer Prozedur, die in eine Tabelle eingefügt wird und mehrere Trigger auslöst, sollten Sie Unit-Tests schreiben, die die Prozedur für verschiedene Eingaben auswerten. Jeder Komponententest sollte bestanden oder nicht bestanden werden, je nachdem, ob er die richtigen Werte zurückgibt, den Status von Tabellen korrekt ändert, die richtige E-Mail erstellt und sogar die richtigen Netzwerkpakete sendet, wenn er dafür ausgelegt ist. Kurz gesagt, jeder Effekt, den das Gerät hat, sollte überprüft werden.
Sie haben Recht, dass das Entwerfen von Einheitentests einige Arbeit erfordert, aber der größte Teil dieser Arbeit muss zum manuellen Testen der Einheit ausgeführt werden. Sie sparen lediglich die zum Testen der Einheit erforderliche Arbeit, damit das Testen bei zukünftigen Änderungen durchgeführt wird kann genauso gründlich und deutlich einfacher sein.
Das Ändern von Daten erschwert das Testen, macht es jedoch nicht weniger wichtig und erhöht den Wert des Einheitentests, da die meisten Schwierigkeiten nur einmal durchdacht werden müssen und nicht jedes Mal, wenn eine Änderung an der Einheit vorgenommen wird. Gespeicherte Datensätze, Einfügungen / Aktualisierungen / Löschungen, die Teil des Setups / Herunterfahrens sind, und Operationen mit engem Umfang können verwendet werden, um dies zu vereinfachen. Da die Frage nicht datenbankspezifisch ist, variieren die Details.
Es gibt keine Komplexitätsschwelle im oberen oder unteren Bereich, die Sie vom Testen oder Unit-Testen abhalten könnte. Betrachten Sie diese Fragen:
- Schreiben Sie immer fehlerfreien Code?
- Sind kleine Einheiten immer fehlerfrei?
- Ist es in Ordnung, wenn eine große Einheit einen Bug hat?
- Wie viele Bugs sind nötig, um eine Katastrophe auszulösen?
Angenommen, Sie starten einen neuen Job und müssen eine Optimierung für eine kleine Funktion vornehmen, die an vielen Stellen verwendet wird. Die gesamte Anwendung wurde von einem Mitarbeiter geschrieben und gepflegt, an den sich noch niemand erinnert. Die Geräte haben eine Dokumentation, die das normale erwartete Verhalten beschreibt, aber sonst wenig. Welche davon würden Sie lieber finden?
- Keine Komponententests in der Anwendung. Nachdem Sie die Änderung vorgenommen haben, können Sie einige manuelle Tests am Gerät selbst durchführen, um sicherzustellen, dass es weiterhin die in der Dokumentation erwarteten Werte zurückgibt. Sie können es dann auf die Produktion ausrollen, die Daumen drücken und hoffen, dass es funktioniert (schließlich schreiben Sie immer fehlerfreien Code und eine Optimierung in einer Einheit könnte niemals eine andere beeinflussen) oder viel Zeit damit verbringen, zu lernen, wie die gesamte Anwendung funktioniert funktioniert so, dass Sie jedes Gerät direkt oder indirekt manuell testen können.
- Unit-Tests in der gesamten Anwendung, die automatisch täglich oder bei Bedarf ausgeführt werden. Sie überprüfen nicht nur normale Eingabewerte und deren erwartete Reaktion, sondern auch abnormale Werte und die erwarteten Ausnahmen, die ausgelöst werden. Sie nehmen Ihre Änderung vor und führen die Komponententestsuite für die Anwendung sofort aus. Dabei stellen Sie fest, dass drei andere Einheiten nicht mehr die erwarteten Ergebnisse liefern. Zwei von ihnen sind harmlos, deshalb müssen Sie die Komponententests anpassen, um dies zu berücksichtigen. Der dritte erfordert einen weiteren leichten Tweak und einen kleinen neuen Unit-Test. Nachdem Sie die Änderungen vorgenommen haben, ist die gesamte Testsuite erfolgreich, und Sie führen die Änderung mit Zuversicht durch.
Schauen Sie sich für PostgreSQL pgTAP an :
quelle
Wenn Sie es vorziehen, die gespeicherten Prozeduren vollständig in SQL zu testen, besuchen Sie http://tsqlt.org/.
Es ist kompatibel mit MS SQL 2005 SP2 und höher, und der Vorteil ist, dass die Entwickler keine Kenntnisse in C # oder einer anderen Sprache benötigen, um die Tests zu implementieren.
Es gibt auch die Möglichkeit, Tabellen und Ansichten zu verspotten, um eine wieder ausführbare Testsuite zu erhalten.
quelle