DBUnit i dane w formacie JSON
W standardowej dystrybucji DBUnit nie ma możliwości załadowania danych w formacie JSON. Nie mi rozsądzać czy to dobrze czy to źle, ale jako, że nie ma to będzie.
Do prawidłowego działania wymagana jest biblioteka google-gson:
Listing 1. Konfiguracja w pom.xml
<dependency><groupid>com.google.code.gson</groupid><artifactid>gson</artifactid><version>2.2.1</version></dependency>
Oraz klasa narzędziowa z poprzedniego wpisu.
Listing 2. Klasa JsonDataSet
public class JsonDataSet extends AbstractDataSet {
private class JsonTable {
private String[] columns;
private String name;
private String[][] rows;
public String[] columns() {
return columns;
}
public String name() {
return name;
}
public String[][] rows() {
return rows;
}
}
private final OrderedTableNameMap _tables;
private JsonTable[] tables;
private JsonDataSet() {
_tables = super.createTableNameMap();
}
@Override
protected ITableIterator createIterator(boolean reversed) throws DataSetException {
@SuppressWarnings("unchecked")
ITable[] tables = (ITable[]) _tables.orderedValues().toArray(new ITable[0]);
return new DefaultTableIterator(tables, reversed);
}
private JsonDataSet init() throws DataSetException {
for (JsonTable jsonTable : tables) {
ITable iTable = table(jsonTable.name(), jsonTable.columns(), jsonTable.rows());
_tables.add(iTable.getTableMetaData().getTableName(), iTable);
}
return this;
}
public static JsonDataSet build(Reader jsonReader) throws DataSetException {
JsonDataSet fromJson = new Gson().fromJson(jsonReader, JsonDataSet.class);
return fromJson.init();
}
public static JsonDataSet build(String jsonString) throws DataSetException {
final JsonDataSet fromJson = new Gson().fromJson(jsonString, JsonDataSet.class);
return fromJson.init();
}
}
Listing 3. Przykładowe dane
{"tables":[
{"name":"AIO","columns":["name","pass"],"rows":[["a","b"],["aa","bb"]]},
{"name":"SimpleUser","columns":["name","password"],"rows":[["a","b"],["aa","bb"]]}
]}
i
Listing 4. Przykładowe zastosowanie
forDB("org.hsqldb.jdbcDriver", //
"jdbc:hsqldb:file:src/test/resources/db/unit-testing-jpa", //
"sa", "") //
.cleanInsert(JsonDataSet.build( //
new FileReader(new File("src/test/resources/simplejsontable")) //
));
Wieczorem opakuje to może w jakiś projekt i umieszczę na Google Code.
Kod jest dostępny na licencji MIT. Jednak niektóre rozwiązania mogą być objęte inną licencją. W takim przypadku jest, to zaznaczone. Artykuły są dostępne na licencji CC-BY.
Jeżeli spodobał ci się ten wpis, to podziel się nim z innymi lub wesprzyj autora.