Wie kann Code getestet werden, der intern MySQL-spezifische Abfragen verwendet?

Ich sammle Daten und speichere diese Daten in einer MySQL-Datenbank mit Java. Außerdem verwende ich Maven zum Erstellen des Projekts, TestNG als Testframework und Spring-Jdbc für den Zugriff auf die Datenbank. Ich habe eine DAO-Ebene implementiert, die den Zugriff auf die Datenbank kapselt. Neben dem Hinzufügen von Daten mithilfe der DAO-Klassen möchte ich einige Abfragen ausführen, die die Daten aggregieren und die Ergebnisse in einigen anderen Tabellen (wie materialisierten Ansichten) speichern.

Jetzt möchte ich einige Testfälle schreiben, die prüfen, ob die DAO-Klassen so funktionieren, wie sie sollten. Aus diesem Grund habe ich mir überlegt, eine In-Memory-Datenbank zu verwenden, in der einige Testdaten gespeichert werden. Da ich auch MySQL-spezifische SQL-Abfragen zum Aggregieren von Daten verwende, gab es einige Probleme:

Zunächst habe ich mir überlegt, einfach die von Spring-Jdbc bereitgestellte Funktionalität für eingebettete Datenbanken zu verwenden, um eine eingebettete Datenbank zu instanziieren. Ich habe mich für die H2-Implementierung entschieden. Dort stieß ich auf Probleme wegen der Aggregationsabfragen, die MySQL-spezifischen Inhalt verwenden (z. B. Zeitmanipulationsfunktionen wie DATE ()). Ein weiterer Nachteil dieses Ansatzes ist, dass ich zwei ddl-Dateien verwalten muss - die eigentliche ddl-Datei, die die Tabellen in MySQL definiert (hier definiere ich die Codierung und füge Kommentare zu Tabellen und Spalten hinzu, beide Funktionen sind MySQL-spezifisch). und die Test-ddl-Datei, die dieselben Tabellen definiert, jedoch ohne Kommentare usw., da H2 keine Kommentare unterstützt.Ich habe eine Beschreibung für die Verwendung von MySQL als eingebettete Datenbank gefunden, die ich in den Testfällen verwenden kann (http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing.html). . Das klang für mich sehr vielversprechend. Leider hat es nicht funktioniert: Ein MissingResourceExcpetion ist aufgetreten "Ressource '5-0-21 / Linux-amd64 / mysqld' nicht gefunden". Es scheint, dass der Treiber den Datenbankdämon auf meinem lokalen Computer nicht finden kann. Aber ich weiß nicht, wonach ich suchen muss, um eine Lösung für dieses Problem zu finden.

Jetzt stecke ich ein bisschen fest und frage mich, ob ich die Architektur anders hätte gestalten sollen. Hat jemand ein paar Tipps, wie ich ein entsprechendes System einrichten soll? Ich habe zwei andere Optionen im Auge:

Anstatt eine eingebettete Datenbank zu verwenden, gehe ich zu einer nativen MySQL-Instanz und richte eine Datenbank ein, die nur für die Testfälle verwendet wird. Diese Option klingt langsam. Eigentlich möchte ich vielleicht später einen CI-Server einrichten, und ich dachte, dass die Verwendung einer eingebetteten Datenbank angemessener wäre, da der Test schneller ausgeführt wird.Ich lösche alle MySQL-spezifischen Inhalte aus den SQL-Abfragen und verwende H2 als eingebettete Datenbank zum Testen. Wenn diese Option die richtige Wahl ist, müsste ich einen anderen Weg finden, um die SQL-Abfragen zu testen, mit denen die Daten in materialisierten Ansichten zusammengefasst werden.Oder gibt es eine dritte Option, die ich nicht im Sinn habe?

Ich würde mich über Hinweise freuen.

Danke, XComp

Antworten auf die Frage(2)

Ihre Antwort auf die Frage