Frage

Ich habe versucht, Unit-Tests zu implementieren und habe derzeit Code, der Folgendes bewirkt:

  1. Abfragen Sie die externe Datenbank ab, Laden in eine Feed -Tabelle
  2. Abfrage einer Ansicht, das ist ein Delta meines Feeds und meiner Daten Tabellen, Aktualisieren der Datentabelle Fütterungstabelle

Meine Unit-Test-Strategie ist folgende:

Ich habe eine Testdatenbank, die ich frei bearbeiten kann.

  1. Laden Sie in setUP() einige Daten in meine Testdatenbank
  2. Führen Sie meinen Code aus und verwenden Sie dabei meine Testdatenbank als Quelle
  3. Überprüfen Sie die Datentabelle und prüfen Sie, ob bestimmte Datensätze vorhanden sind oder nicht
  4. Löschen Sie die Testdatenbank und laden Sie einen anderen Datensatz
  5. Führen Sie den Code erneut aus
  6. Überprüfen Sie die Datentabelle erneut

Offensichtlich habe ich die Datensätze, die ich in die Quelldatenbank lade, so eingerichtet, dass ich weiß, dass bestimmte Datensätze hinzugefügt, gelöscht, aktualisiert usw. werden sollen.

Das scheint etwas umständlich zu sein und es sollte einen einfacheren Weg geben?irgendwelche Vorschläge?

War es hilfreich?

Lösung

Beabsichtigen Sie, die Ansicht zu testen, die die Deltas generiert, oder zu testen, ob Ihr Code als Reaktion auf die Ansicht korrekt hinzufügt, löscht und aktualisiert?

Wenn Sie die Ansicht testen möchten, können Sie ein Tool wie verwenden DBUnit um Ihre Feed- und Datentabellen mit verschiedenen Daten zu füllen, deren Delta Sie manuell berechnet haben.Dann würden Sie für jeden Test überprüfen, ob die Ansicht einen passenden Satz zurückgibt.

Wenn Sie testen möchten, wie Ihr Code auf von der Ansicht erkannte Unterschiede reagiert, würde ich versuchen, den Datenbankzugriff zu abstrahieren.Ich stelle mir eine Java-Methode vor, an die Sie eine Ergebnismenge (oder eine Liste von POJOs/DTOs) übergeben können und die eine Liste von Parameter-Objekt-Arrays (wiederum oder POJOs) zurückgibt, die hinzugefügt werden sollen.Andere Methoden würden die Diff-Liste nach Elementen durchsuchen, die entfernt und aktualisiert werden sollen.Anschließend können Sie eine simulierte Ergebnismenge oder Pojos erstellen, diese an Ihren Code übergeben und überprüfen, ob die richtigen Parameter zurückgegeben werden.Und das alles, ohne eine Datenbank anzufassen.

Ich denke, der Schlüssel liegt darin, Ihren Prozess in Teile zu unterteilen und jeden einzelnen Teil so unabhängig wie möglich zu testen.

Andere Tipps

DbUnit wird Ihre Bedürfnisse erfüllen.Eine Sache, auf die Sie achten sollten, ist, dass sie auf die Verwendung von SLF4J als Protokollierungsfassade anstelle von JCL umgestiegen sind.Sie können SLF4J so konfigurieren, dass die Protokollierung an JCL weitergeleitet wird. Seien Sie jedoch gewarnt, wenn Sie Maven verwenden. DbUnit saugt standardmäßig deren Nop-Protokollanbieter ein, sodass Sie einen Ausschluss verwenden müssen, I gebloggt über diesen Konflikt kürzlich.

Ich verwende DbUnit, arbeite aber auch sehr hart daran, nicht gegen die Datenbank testen zu müssen.Tests, die gegen die Datenbank gerichtet sind, sollten nur zum Testen der Datenbankschnittstelle vorhanden sein.Ich habe also Mock-Db-Verbindungen, mit denen ich die Daten für die Verwendung in allen anderen Tests festlegen kann.

Abgesehen von der bereits vorgeschlagenen DBUnit möchten Sie vielleicht einen Blick darauf werfen Unitils.Es verwendet DBUnit, bietet aber mehr als das (Zitat von der Website):

  • Automatische Wartung von Datenbanken mit Unterstützung für inkrementelle, Wiederholbare und nachträgliche Skripte
  • Deaktivieren Sie automatisch Einschränkungen und setzen Sie Sequenzen auf einen Mindestwert
  • Unterstützung für Oracle, Hsqldb, MySql, DB2, Postgresql, MsSql und Derby
  • Vereinfachen Sie die Einrichtung der Testdatenbankverbindung
  • Einfaches Einfügen von Testdaten mit DBUnit * Führen Sie Tests in einer Transaktion aus
  • JPA-Entity-Manager-Erstellung und -Injektion für Hibernate, Toplink und * SessionFactory-Erstellung in den Ruhezustand versetzen und Sitzung
  • Automatisches Testen der Zuordnung von JPA-Entitäten / Hibernate gemappt Objekte mit der Datenbank

Wenn Sie Maven verwenden, besteht eine Möglichkeit darin, das zu verwenden SQL-Maven-Plugin.Es ermöglicht Ihnen, während des Maven-Build-Zyklus Datenbankinitialisierungs-/Befüllungsskripte auszuführen.

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