Как смоделировать результат агрегирования функции с JOOQ? - PullRequest
0 голосов
/ 10 мая 2018

Я вызываю агрегатную функцию подсчета в моем классе обслуживания, используя JOOQ.

SelectQuery<Record> query = this.dsl.selectQuery();
query.addSelect(DSL.count());
query.addFrom(SOME_TABLE);
final Integer total = query.fetchOne(0, Integer.class);

Мне нужно смоделировать результат подсчета в моем модульном тесте.Каков наилучший способ сделать это?

Следуя документации jooq , я должен создать запись результата с соответствующим количеством полей.Примерно так:

Result<Record1<Integer>> result = create.newResult(...);

Но что мне нужно использовать в качестве параметров метода create.newResult() в случае создания фиктивной записи для агрегатной функции?

1 Ответ

0 голосов
/ 11 мая 2018

Ваш запрос должен возвращать одну строку с одним столбцом, поэтому создайте такой результат:

Field<Integer> c = DSL.count();
Result<Record1<Integer>> result = create.newResult(c);
result.add(create.newRecord(c).values(42));

В связанной с вами документации приведен очень похожий пример:

...
// You decide, whether any given statement returns results, and how many
else if (sql.toUpperCase().startsWith("SELECT")) {

    // Always return one record
    Result<Record2<Integer, String>> result = create.newResult(AUTHOR.ID,AUTHOR.LAST_NAME);
    result.add(create
        .newRecord(AUTHOR.ID, AUTHOR.LAST_NAME)
        .values(1, "Orwell"));
    mock[0] = new MockResult(1, result);
}
...
...