Ich sammle Daten und speichern diese Daten in einer MySQL-Datenbank mit Hilfe von Java verwendet. 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 unter Verwendung der DAO-Klassen möchte ich einige Abfragen ausführen, die die Daten aggregieren und die Ergebnisse in einigen anderen Tabellen speichern (wie materialisierte Ansichten).Was ist der geeignete Weg, um Code zu testen, die MySQL-spezifische Anfragen intern
Nun würde Ich mag einige Testfälle schreiben, die prüfen, ob die DAO-Klassen arbeiten, wie sie sollten. Daher dachte ich über die Verwendung einer In-Memory-Datenbank nach, die mit einigen Testdaten bestückt wird. Da ich auch MySQL-spezifische SQL-Abfragen unter Verwendung von Daten zum Aggregieren, ging ich in einige Schwierigkeiten:
- Erstens, ich habe gedacht, einfach mit der eingebetteten Datenbank-Funktionalität von Spring-Jdbc bereitgestellt eine eingebettete Datenbank zu instanziiert . Ich habe mich entschieden, die H2-Implementierung zu verwenden. Dort geriet ich wegen der Aggregationsabfragen in Schwierigkeiten, die MySQL-spezifischen Inhalt verwenden (z. B. Zeitmanipulationsfunktionen wie DATE()). Ein weiterer Nachteil dieses Ansatzes ist, dass ich zwei ddl-Dateien pflegen 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 Testddl-Datei, die dieselben Tabellen aber ohne Kommentare usw. definiert, da H2 keine Kommentare unterstützt.
- Ich habe eine Beschreibung für den Einsatz von MySQL als eingebettete Datenbank gefunden, die ich in den Testfällen verwenden (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: Eine MissingResourceExcpetion ist aufgetreten "Ressource '5-0-21/Linux-amd64/mysqld' nicht gefunden". Es scheint, dass der Treiber den Datenbank-Daemon auf meinem lokalen Rechner nicht finden kann. Aber ich weiß nicht, wonach ich suchen muss, um eine Lösung für dieses Problem zu finden.
- Anstatt eine eingebettete Datenbank zu verwenden, werde ich mit einer nativen MySQL-Instanz gehen und eine Datenbank einrichten, die nur für die Testfälle verwendet wird. Diese Option klingt langsam. Eigentlich möchte ich später einen CI-Server einrichten, und ich dachte, dass die Verwendung einer eingebetteten Datenbank besser geeignet wäre, da der Test schneller läuft.
- ich löschen Sie alle MySQL-spezifische Sachen aus der SQL-Abfragen und verwenden H2 als eingebettete Datenbank für die Prüfung. Wenn diese Option die richtige ist, müsste ich eine andere Möglichkeit finden, die SQL-Abfragen zu testen, die die Daten in materialisierten Ansichten aggregieren.
- Oder gibt es eine dritte Option, die ich im Sinn haben, nicht wahr?
Jetzt bin ich ein bisschen fest und ich frage mich, ob ich die Architektur anders hätte erstellen sollen. Hat jemand ein paar Tipps, wie ich ein entsprechendes System aufbauen soll? Ich habe zwei andere Optionen im Sinn:
würde ich irgendwelche Hinweise zu schätzen wissen.
Danke, XComp