Ich programmiere in Java und meine Anwendungen nutzen DB sehr häufig. Daher ist es wichtig, dass ich meine DB-Nutzung einfach testen kann.
Worum geht es bei DB-Tests? Für mich sollten sie zwei einfache Anforderungen erfüllen:
- Überprüfen Sie die SQL-Syntax.
- Noch wichtiger ist, überprüfen Sie, ob die Daten je nach Situation korrekt ausgewählt / aktualisiert / eingefügt wurden.
Nun, es scheint, dass ich nur eine DB brauche.
Aber eigentlich bevorzuge ich nicht, da es nur wenige Schwierigkeiten gibt, eine DB für einen Test zu verwenden:
- "Hol dir einfach eine Test-DB, wie schwer könnte es sein?" - An meinem Arbeitsplatz ist es ziemlich unmöglich, eine persönliche Test-DB zu haben. Sie müssen eine "öffentliche" Datenbank verwenden, auf die jeder zugreifen kann.
- "Diese Tests sind sicher nicht schnell ..." - DB-Tests sind in der Regel langsamer als übliche Tests. Es ist wirklich nicht ideal, langsame Tests zu haben.
- "Dieses Programm sollte auf jeden Fall funktionieren!" - Es wird etwas nervig und sogar unmöglich, jeden einzelnen Fall in einer DB zu simulieren. Für jeden Fall sollte eine bestimmte Anzahl von Abfrage- / Aktualisierungsabfragen durchgeführt werden, was ärgerlich ist und Zeit in Anspruch nimmt.
- "Moment mal, woher weißt du, dass diese Tabelle 542 Zeilen enthält?" - Eines der Hauptprinzipien beim Testen ist es, die Funktionalität auf eine Weise testen zu können, die sich von der Ihres getesteten Codes unterscheidet. Wenn Sie eine Datenbank verwenden, gibt es normalerweise eine Möglichkeit, etwas zu tun. Daher ist der Test genau der gleiche wie der Kerncode.
Sie können also herausfinden, dass ich DBs nicht mag, wenn es um Tests geht (natürlich muss ich irgendwann darauf zurückkommen, aber ich würde lieber später zu meinen Tests kommen, nachdem ich die meisten Fehler mit dem gefunden habe Rest der Testmethoden). Aber wonach suche ich?
Ich suche nach einer Möglichkeit, eine Datenbank, eine Scheindatenbank, mithilfe des Dateisystems oder nur des virtuellen Speichers zu simulieren. Ich dachte, dass es vielleicht ein Java-Tool / -Paket gibt, mit dem einfach (mithilfe der Codeschnittstelle) ein DB-Modell pro Test mit simulierten Tabellen und Zeilen, mit SQL-Überprüfung und mit einer Codeschnittstelle zur Überwachung des Status erstellt werden kann (anstatt SQL zu verwenden) ).
Kennen Sie diese Art von Werkzeug?
Edit: Danke für die Antworten! Obwohl ich nach einem Tool gefragt habe, haben Sie mir auch einige Tipps zum Problem gegeben :) Es wird einige Zeit dauern, bis ich Ihre Angebote überprüft habe. Daher kann ich derzeit nicht sagen, ob Ihre Antworten nicht zufriedenstellend waren.
Hier ist eine bessere Übersicht über das, wonach ich suche: Stellen Sie sich eine Klasse mit dem Namen DBMonitor vor, die unter anderem die Anzahl der Zeilen in einer Tabelle ermittelt. Hier ist ein imaginärer Code, wie ich diese Funktion mit JUnit testen möchte:
public class TestDBMonitor extends TestCase {
@Override
public void setUp() throws Exception {
MockConnection connection = new MockConnection();
this.tableName = "table1";
MockTable table = new MockTable(tableName);
String columnName = "column1";
ColumnType columnType = ColumnType.NUMBER;
int columnSize = 50;
MockColumn column = new MockColumn(columnName, columnType, columnSize);
table.addColumn(column);
for (int i = 0; i < 20; i++) {
HashMap<MockColumn, Object> fields = new HashMap<MockColumn, Object>();
fields.put(column, i);
table.addRow(fields);
}
this.connection = connection;
}
@Test
public void testGatherStatistics() throws Exception {
DBMonitor monitor = new DBMonitor(connection);
monitor.gatherStatistics();
assertEquals(((MockConnection) connection).getNumberOfRows(tableName),
monitor.getNumberOfRows(tableName));
}
String tableName;
Connection connection;
}
Ich hoffe, dieser Code ist klar genug, um meine Idee zu verstehen (entschuldigen Sie mich für Syntaxfehler, ich habe manuell ohne meine liebe Eclipse: P getippt).
Übrigens verwende ich ORM teilweise und meine rohen SQL-Abfragen sind recht einfach und sollten sich nicht von einer Plattform zur anderen unterscheiden.