Frage

Ich bin gerade dabei, unsere Lösung zu testen, dass die gesamten „Gamut“ von Schichten hat. UI, Mitte, und die allgegenwärtige Datenbank

Vor meiner Ankunft auf meinem aktuellen Team, Abfrage-Tests von den Testern durchgeführt wurde manuell Abfragen Crafting, die theoretisch ein Ergebnis zurückgeben würden eingestellt, dass die gespeicherte Prozedur Rendite auf verschiedene Relevanzregeln basieren soll, Sortierung, was Sie hat.

Dies hatte die Nebenwirkung der Fehler gegen die Abfrage des Testers eingereicht werden häufiger als gegen die eigentliche Abfrage in Frage.

Ich schlug vor, tatsächlich mit einem bekannten Ergebnismenge arbeiten, die Sie könnten nur folgern, wie es zurückgeben sollte, da Sie die vorhandenen Daten zu steuern -. Vorher wurden die Daten aus der Produktion gezogen, desinfiziert und dann in unseren Testdatenbanken bevölkern

Die Menschen waren immer noch hartnäckig auf ihre eigenen Erstellen von Abfragen zu testen, was die Entwickler geschaffen haben. Ich vermute, dass viele nach wie vor sind. Ich habe es in meinem Kopf, dass dies überhaupt nicht ideal, und nur erhöhe unseren Test Fußabdruck unnötig.

Also, ich bin gespannt, welche Praktiken verwenden Sie Szenarien wie dies zu testen, und was ideal für die beste End-to-End-Abdeckung betrachtet würde können Sie, ohne die Einführung chaotische Daten?

Das Problem, das ich habe, ist, wo ist der beste Ort, welche Tests zu tun. Muss ich stecken nur den Service direkt, und vergleichen Sie diese Datenmenge zu dem, was ich aus der gespeicherten Prozedur ziehen können? Ich habe eine ungefähre Vorstellung, und haben erfolgreich genug, so weit, aber ich fühle mich wie wir immer noch wichtig, hier etwas fehlt sind, so dass ich mit Blick auf die Gemeinde, um zu sehen, ob sie irgendwelche wertvolle Erkenntnisse haben, die helfen könnten meine Prüfansatz zu formulieren besser.

War es hilfreich?

Lösung

Test gespeichert Procs wird verlangen, dass jede Person, die eine separate Instanz der db-Tests hat. Dies ist eine Voraussetzung. Wenn Sie Umgebungen teilen Sie nicht in der Lage sein auf die Ergebnisse Ihres Tests zu verlassen. Sie werden wertlos.

Sie müssen auch sicherstellen, dass Sie die db zurückrollen, um es nach jedem Test vorheriger Zustand ist, um die Ergebnisse vorhersehbar und stabil zu machen. Aufgrund dieser Notwendigkeit diese Tests den Zustand nach jedem Test ein Rollback wird viel länger dauern als Standard-Unit-Tests zu vervollständigen, so dass sie wohl etwas sein, sollten Sie Nacht laufen.

Es gibt ein paar Tools gibt Ihnen dabei zu helfen. DbUnit ist einer von ihnen, und ich glaube auch Microsoft ein Tool Visual Studio für Database Professionals hatte, die eine gewisse Unterstützung für DB-Tests enthalten sind.

Andere Tipps

Hier sind einige Richtlinien:

  1. Verwenden Sie eine isolierte Datenbank für Unit-Tests (beispielsweise keine weiteren Testläufen oder Aktivität)
  2. Setzen Sie immer alle Testdaten, die Sie im gleichen Test
  3. abfragen beabsichtigen
  4. Schreiben Sie die Tests nach dem Zufallsprinzip verschiedene Datenmengen erstellen z.B. Zufallszahl von Einsätzen etwa zwischen 1 und 10 Reihen
  5. Randomize die Daten z.B. für einen boolean Feld Zufall Einsatz und wahr oder falsch
  6. eine Zählung im Test der Variablen hält (zum Beispiel Anzahl der Zeilen, die Anzahl der trues)
  7. Für die Abfrage Asserts ausführen und vergleichen gegen lokale Testvariablen
  8. Verwenden Enterprises Dienstleistungen Transaktionen Datenbank zur vorherigen Zustand zurückzurollen

den Link unten für die Unternehmen Dienstleistungen Transaktion Technik Siehe auch:

http://weblogs.asp.net/rosherove/articles/DbUnitTesting.aspx

Im Rahmen unserer kontinuierlichen Integration, führen wir unsere nächtlichen ‚bauen‘ der Datenbankabfragen. Dies beinhaltet eine Reihe von DB Anrufen, das regelmäßig von den wirklichen Anrufen im Code sowie alle erwarteten Ad-hoc-Abfragen aktualisiert werden.

Diese Anrufe zeitlich gesteuert, um sicherzustellen,

1 / Sie nehmen nicht zu lang.

2 / Sie unterscheiden sich nicht wild (in einem schlechten Weg) von der vorherigen Nacht.

Auf diese Weise fangen wir fehlerhafte Abfragen oder DB ändert sich schnell.

Der Anfrageplaner ist dein Freund, vor allem in diesem Fall. Es ist immer gut Praxis zu überprüfen, um zu sehen, dass Indizes verwendet werden, wenn man sie erwarten zu sein, und dass die Abfrage nicht zusätzliche Arbeit erfordert getan werden. Auch wenn Sie Stress-Tests in der Suite enthalten sind, ist es immer noch eine gute Idee, teure Abfragen zu fangen, bevor die App zum Stillstand beginnt Schleifen.

Wir haben eine leere Datenbank beiseite legen für jeden Entwickler und Tester.

Wenn die Tests ausgeführt werden - jeder Test löscht die Datenbank und lädt die Daten, die sie erwarten, sind zu verwenden. Das gibt uns einen bekannten Zustand zu allen Zeiten.

Wir können dann verschiedene Szenarien auf dem gleichen DB (hintereinander) testen und wir stempeln nie auf einem anderen Testern Zehen.

Das deckt den Datenzugriff testen selbst. Für Service-Tests haben wir viel das Gleiche, aber wir testen das Innere des Service - nur wir nicht schlagen tatsächlich den Dienst wir eine Instanz der Dienstverarbeitung Klasse erstellen und übergeben Sie alles, was wir brauchen. So können wir den Code testen und nicht die Infrastruktur (Meldung etc ..)

Django bietet eine Datenbank Unit-Test-Fähigkeit. Sie können ihre Design-Ideen leihen und es in anderen Umgebungen zu reproduzieren.

Die Django Leute eine Unterklasse von Python-Standardunittest TestCase Klasse bieten, die eine Datenbank mit einer bekannten Halterung auffüllt -. Einen bekannten Satz von Datenzeilen

Im Fall von Django (und Python) ist es am einfachsten, die Datenbank von einem JSON-Daten extrahieren zu füllen. Andere Dateiformate für die Befestigung können für anderen Frameworks verwendet werden. Zum Beispiel, wenn Sie in Oracle arbeiten, könnten Sie CSV-Dateien einfacher finden, mit zu arbeiten.

Diese TestCase Unterklasse ermöglicht eine typische aussehende Testcase zu schreiben, die die Datenbank mit der bekannten Daten Befestigung ausübt.

Darüber hinaus erstellt der Django Test Runner ein temporäres Schema für Testzwecke. Dies ist einfach für Django, weil sie eine vollständige objektrelationalen Management-Komponente, die DDL-Erstellung enthält. Wenn Sie nicht über diese zur Verfügung haben, werden Sie noch brauchen die DDL Skript so können Sie von einem Testschema für Unittest Zwecke erstellen und entsorgen.

SQLServerCentral hat einen Artikel hier (Sie sich registrieren müssen, aber es ist kostenlos und ohne Streicher) über eine TSQL Unit Testing Framework genannt tsqlUnit. Es ist Open Source und steht in der Tradition des xUnit Rahmen zusammen.

Es folgt die SEAT TDD Mustern:

Setup - bereitet die Testbedingungen durch die Objekte, Tabellen bearbeiten und / oder Daten

Übung - rufen Sie den Produktionscode

Assert - überprüfen, dass das tatsächliche Ergebnis das erwartete Ergebnis ist gleich

Teardown - Rückkehr alles wieder so war es, bevor der Test gestartet. Dies wird tatsächlich getan durch Rollen einer Transaktion zurück, die alles schön und sauber hält.

Auch wenn ich es nicht benutzt haben, es sieht vielversprechend aus und ist sicherlich etwas, das ich bei genauer wird suchen.

kann der Rahmen heruntergeladen werden hier .

Ich finde es nützlich die SQL gesendet hinunter in die Datenbank zu testen, anstatt das Ergebnis der Abfrage der Datenbank.

Nicht, dass ich das später nicht tun, aber ich finde es viel schneller für das zu testen, als die Datenbank zu viel Heben mit.

Dies ist eine schwere Setup, aber ich empfehle TDDing Behälter.

Bei Ihrer Testskript läuft, einen neuen Container erstellen, die Ihre Datenbank hat im Innern laufen, Saatgut mit Mock Daten, dann die Abfragen und Test gegen laufen, was zurückgegeben wurde oder nicht und ob die Abfragen erfolgreich waren.

Auf diese Weise haben Sie die Kontrolle darüber, wie nah Ihre Testumgebung für die Produktion.

Thought

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top