JUnit – Daten aus Xml, CSV, Json .. als Liste im Test bereitstellen

Mit Hilfe von DBUnit können Datenbanken mit Daten z.B. aus CSV oder XML Dateien vor einem Test befüllt werden.

In einigen Testfällen werden aber auch Testdaten benötigt die sich noch nicht in der Datenbank befinden und nicht mit “SELECT” aus der Datenbank geholt werden sollten. Eine Möglichkeit ist, Objekte zu erstellen und die Attribute mit Daten zu befüllen.

Ich habe mir mit Hilfe von DBUnit noch eine weitere Möglichkeit geschaffen. Ich lese Daten aus XML, CSV … etc. mit Hilfe von DBUnit ein und schreibe sie dann nicht in die Datenbank sondern gebe sie mir als Liste in der Testmethode aus. Das im Beispiel erwähnte JsonDataSet habe ich von danhaywood aus seinem Beitrag http://danhaywood.com/2011/12/20/db-unit-testing-with-dbunit-json-hsqldb-and-junit-rules/. Das Beispiel wurde mit einer Example Klasse (https://gist.github.com/itsei/b28ec83c00dae167f1eb#file-example-java)  umgesetzt und entspricht dem Objekt der Testdaten.

Alle folgende Dateien sind unter https://gist.github.com/itsei/b28ec83c00dae167f1eb zu finden.

Um die Daten dynamisch später laden zu können benötigen wir ein Interface (https://gist.github.com/itsei/b28ec83c00dae167f1eb#file-dataloader-java) :

Für unsere Example Klasse benötigen wir jetzt noch die entsprechende Implementierung des Loaders, ExampleLoaderImpl. (https://gist.github.com/itsei/b28ec83c00dae167f1eb#file-exampleloaderimpl-java). Dabei sollte je nach Attribute Type der folgende Code noch erweitert werden (teil Ausschnitt, kompletter Code siehe Link:

Damit wird die Daten nun aber auch laden können, wird die Klasse DataLoaderStatement benötigt (https://gist.github.com/itsei/b28ec83c00dae167f1eb#file-dataloaderstatement-java). Diese Klasse wird später als Rule eingebunden und die Dateien mit den Testdaten mit den Annotationen angeben. Der folgende Code zeigt exemplarisch das Laden einer XML Datei (für den Rest siehe Link):

Die CSV Implementierung kann durch kopieren des JsonDataSets einfach realisiert werden. Dazu muss einfach nur die getTable Methode angepasst werden:

Die Einbindung in einen Test sieht dann wie folgt aus (https://gist.github.com/itsei/b28ec83c00dae167f1eb#file-exampletest-java) :

Maven Dependencies:


For english:

How you can load data from files for tests? I have write an example to load data as array list in test cases.

You can find all files under https://gist.github.com/itsei/b28ec83c00dae167f1eb.

Tagged , ,

Leave a Reply

Your email address will not be published. Required fields are marked *