Gibt es ein dbunit-ähnliches Framework, das nicht für Java / Scala geeignet ist?

Ich habe darüber nachgedacht, ein neues, leichtes Datenbank-Populations-Framework zu erstellen. Ich hasse Dbunit. Bevor ich es tue, möchte ich wissen, ob es bereits jemand getan hat.

Things Ich mag nicht über dbunit:

1) Das einfachste Format zum Schreiben und Starten ist veraltet. Sie möchten, dass Sie Formate verwenden, die aufgebläht sind. Einige erfordern sogar XML-Schemata. Ja, wie auch immer

2) Sie füllen die Zeilen nicht in der Reihenfolge, in der Sie sie schreiben, sondern in der Reihenfolge, in der die Tabellen in der XML-Datei definiert sind. Das ist wirklich schlimm, weil Sie Ihre Daten nicht so bestellen können, dass Fremdschlüsselbeschränkungen keine Probleme verursachen. Dies zwingt Sie nur dazu, die Mühe zu machen, sie komplett auszuschalten.

Dies verschwendet auch Zeit und bläht Ihre Junit-Basisklassen auf, um Code zum Deaktivieren der Fremdschlüsseleinschränkungen einzuschließen. Wahrscheinlich müssen Sie den Datenbanktyp (hsqldb usw.) testen und auf datenbankspezifische Weise deaktivieren. Das ist so schlimm.

Es könnte besser sein, wenn dbunit dabei hilft, Fremdschlüsseleinschränkungen als Teil ihres Frameworks automatisch zu deaktivieren, aber das tun sie nicht. Sie behalten die Dialekte im Auge ... warum also nicht? Letztendlich zwingt dies den Programmierer, Zeit zu verschwenden und nicht schnell aufzustehen und zu testen.

3) XML ist sehr schwierig zu schreiben. Mehr muss ich dazu nicht sagen. Sie bieten auch so viele Möglichkeiten, dass ich denke, dass es die Sache nur kompliziert macht. Biete einfach einen wirklich soliden Weg an und sei damit fertig.

4) Wenn Ihre Daten umfangreich werden, ist es ein großer Schmerz, die IDs und ihre konsistenten / korrekten Beziehungen im Auge zu behalten.

Auch, wenn Sie einen Monat lang nicht an einem Projekt arbeiten, wie können Sie sich erinnern, dass user_id 1 ein Administrator, user_id 2 ein Geschäftsbenutzer, user_id 3 ein Ingenieur und user_id 4 etwas anderes war? Wenn Sie dies überprüfen, wird mehr Zeit verschwendet. Es sollte eine sinnvolle Möglichkeit zum Abrufen einer anderen als einer beliebigen Zahl geben.

5) Es ist langsam. Ich habe festgestellt, dass es schmerzhaft langsam ist, wenn nicht hsqldb verwendet wird. Das muss nicht sein. Es gibt auch zahlreiche Möglichkeiten, die Konfiguration durcheinander zu bringen, da es nicht einfach ist, "out of the box" zu arbeiten. Es gibt einen Buckel, den Sie überwinden müssen, damit er richtig funktioniert. Das alles ermutigt die Leute, es nicht zu benutzen oder sauer zu sein, wenn sie anfangen, es zu benutzen.

6) Einige Werte wiederholen sich häufig, mögen Datumsangaben. Es wäre schön, Standardeinstellungen festzulegen oder das Framework sogar automatisch Standardeinstellungen zuweisen zu lassen, selbst wenn Sie es nicht anweisen, Standardeinstellungen vorzunehmen. Auf diese Weise können Sie Objekte nur mit den gewünschten Werten erstellen und den Rest weglassen. Dies ist sicher besser, als jeden Winkel und jede Ecke einer Spalte anzugeben, wenn dies nicht erforderlich ist.

7) Wahrscheinlich ist es am ärgerlichsten, dass der erste Eintrag ALLE Werte enthalten muss - auch Null-Platzhalter -, sonst werden in zukünftigen Zeilen nicht die Spalten ausgewählt, die Sie tatsächlich angegeben haben.

DBunit hat auch keinen vernünftigen Standard für die Übersetzung von [NULL] in einen echten Nullwert. Sie müssen es manuell hinzufügen. Sag mir, wer hat das nicht mit dbunit gemacht? Jeder hat. Es sollte nicht so sein!

Wenn Sie also ein polymorphes Objekt haben, müssen Sie alle Fremdschlüssel für die Verknüpfungstabellen jeder Unterklasse in der ersten Zeile deklarieren, auch wenn sie null sind. Wenn Sie eine Tabelle für alle Unterklassenmuster erstellen, müssen Sie weiterhin alle Felder in der ersten Zeile angeben. Das ist einfach schrecklich.

Ist irgendetwas da draußen, um mich zufriedenzustellen, oder sollte ich der nächste Framework-Entwickler eines viel besseren Frameworks für Datenbanktests werden?

Antworten auf die Frage(26)

Ihre Antwort auf die Frage