Хорошо, у меня все было не так.
У меня сложилось впечатление, что вы можете загружать данные в таблицы в памяти, используя приведенный ниже API, и создавать фиктивную базу данных, состоящую из нескольких обязательных таблиц, и выполнять некоторые запросы к ней.
// Load data into the BOOK table from an input stream
// holding the CSV data.
create.loadInto(BOOK)
.loadCSV(inputstream, encoding)
.fields(BOOK.ID, BOOK.AUTHOR_ID, BOOK.TITLE)
.execute();
Поняв, что потратив пару часов на выяснение того, как загрузить данные из csv (описано ниже), jooq (удивительный API для написания запросов) не является ядром базы данных и не может на самом деле выполняться запросы к данным в памяти.
загрузка фиктивных данных из csv:
@Override
public MockResult[] execute(MockExecuteContext ctx) throws SQLException {
List<String> strings = Files.readAllLines(Paths.get("table_data.csv"));
String csvString = strings.stream()
.reduce(new StringJoiner("\n"), StringJoiner::add, StringJoiner::merge)
.toString();
DSLContext create = DSL.using(SQLDialect.MYSQL);
Result<Record> records = create.fetchFromCSV(csvString);
List<YourTableDataRecord> tableDataList = records.into(YourTableDataRecord.class);
Result<YourTableDataRecord> result = create.newResult(POJO_RERESENTING_THE_DATA);
result.addAll(tableDataList);
return new MockResult[]{
new MockResult(result.size(), result)
};
}
Обратите внимание, что вышеупомянутое решение может быть сделано более эффективно, читая построчно и кэшируя результаты.
Кроме того, для каждого запроса должен быть создан фиктивный результат. Подробнее читайте здесь https://blog.jooq.org/tag/unit-testing/ в разделе Для этого используйте MockDataProvider от jOOQ