Um Aspekte von ein paar Antworten zusammen zu ziehen und meine 2P hinzuzufügen ...
Hinweis: Meine Kommentare beziehen sich insbesondere auf Datenbanktests und nicht auf UI-Tests (obwohl dies offensichtlich ähnlich ist).
Datenbanken müssen genauso getestet werden wie Front-End-Anwendungen, werden jedoch in der Regel auf der Grundlage von "Funktioniert das mit dem Front-End?" Getestet. oder 'Erzielen die Berichte das richtige Ergebnis?', was meiner Meinung nach erst sehr spät im Prozess der Datenbankentwicklung getestet wird und nicht sehr robust ist.
Wir haben eine Reihe von Kunden, die zusätzlich zu den üblichen UAT / Performance / et al. Unit / Integration / Systemtests für ihre Data Warehouse-Datenbank verwenden. Tests. Sie stellen fest, dass sie mit einer kontinuierlichen Integration und automatisierten Tests viele Probleme lösen, bevor sie zur traditionellen UAT gelangen, wodurch sie Zeit in der UAT sparen und die Erfolgsaussichten für die UAT erhöhen.
Ich bin sicher, die meisten würden zustimmen, dass beim Testen von Datenbanken eine ähnliche Strenge angewendet werden sollte wie beim Testen von Frontends oder Berichten.
Das Wichtigste beim Testen ist das Testen kleiner einfacher Entitäten, um deren Richtigkeit sicherzustellen, bevor komplexe Kombinationen von Entitäten erstellt werden, um deren Richtigkeit sicherzustellen, bevor das System erweitert wird.
Geben Sie meiner Antwort einen Kontext ...
Unit Testing
- hat einen Testfokus, um zu beweisen, dass das Gerät funktioniert, z. B. eine Tabelle, eine Ansicht, eine Funktion oder eine gespeicherte Prozedur
- sollten die Schnittstellen "stubben", um externe Abhängigkeiten zu entfernen
- stellt seine eigenen Daten zur Verfügung. Sie benötigen einen bekannten Anfangszustand der Daten. Wenn also die Möglichkeit besteht, dass Daten vor dem Test vorhanden sind, sollten vor dem Auffüllen Kürzungen / Löschungen vorgenommen werden
- läuft im Idealfall in einem eigenen Ausführungskontext
- wird nach sich selbst aufräumen und die verwendeten Daten entfernen; Dies ist nur wichtig, wenn Stichleitungen nicht verwendet werden.
Dies hat den Vorteil, dass Sie alle externen Abhängigkeiten vom Test entfernen und den geringsten Testumfang ausführen, um die Richtigkeit zu überprüfen. Offensichtlich können diese Tests nicht in der Produktionsdatenbank ausgeführt werden. Abhängig von der Art der Einheit können verschiedene Arten von Tests durchgeführt werden, darunter:
- Schemaprüfung, einige nennen dies möglicherweise einen "Datenvertrag" -Test
- Spaltenwerte durchlaufen
- das Ausüben von logischen Pfaden mit unterschiedlichen Datenwerten für Funktionen, Prozeduren, Ansichten, berechnete Spalten
- Edge-Case-Test - NULL, fehlerhafte Daten, negative Zahlen, zu große Werte
(Unit) Integrationstests
Ich fand diesen SE-Beitrag hilfreich, um über verschiedene Arten von Tests zu sprechen.
- hat den Testfokus, um zu beweisen, dass Einheiten zusammenpassen
- auf einer Reihe von Einheiten zusammen durchgeführt
- sollten die Schnittstellen "stubben", um externe Abhängigkeiten zu entfernen
- stellt seine eigenen Daten zur Verfügung, um die Auswirkungen externer Dateneinflüsse zu beseitigen
- läuft im Idealfall in einem eigenen Ausführungskontext
- wird nach sich selbst aufräumen und die erstellten Daten entfernen; Dies ist nur wichtig, wenn Stichleitungen nicht verwendet werden.
Beim Übergang von Komponententests zu diesen Integrationstests sind häufig etwas mehr Daten vorhanden, um eine größere Vielfalt von Testfällen zu testen. Offensichtlich können diese Tests nicht in der Produktionsdatenbank ausgeführt werden.
Anschließend werden Systemtests , Systemintegrationstests (auch als End-2-End-Tests bezeichnet) mit zunehmendem Datenvolumen und zunehmendem Umfang durchgeführt. Alle diese Tests sollten Teil eines Regressionstest-Frameworks werden. Einige dieser Tests werden möglicherweise von den Benutzern ausgewählt, die im Rahmen der UAT durchgeführt werden sollen, aber die UAT sind die von den Benutzern definierten Tests , nicht die von der IT definierten - ein häufiges Problem!
Nun habe ich einen Kontext angegeben, um Ihre eigentlichen Fragen zu beantworten
- Das Vorbelegen von Daten für Unit- und Integrationstests kann zu falschen Testfehlern führen und sollte vermieden werden.
- Die einzige Möglichkeit, konsistente Tests sicherzustellen, besteht darin, keine Annahmen über die Quelldaten zu treffen und diese genau zu kontrollieren.
- Ein separater Testausführungskontext ist wichtig, um sicherzustellen, dass ein Tester nicht mit einem anderen Tester in Konflikt steht, der dieselben Tests auf einem anderen Zweig des Quellcode-gesteuerten Datenbankcodes ausführt.