如何在 jOOQ 的 MockDataProvider 中创建带有示例数据的自定义记录?

How to create a custom Record with sample data in a jOOQ's MockDataProvider?

我正在尝试使用 jOOQ's mocking tools 实施单元测试,但未能理解如何创建自定义记录并在其中放置一些数据。

这是我的 MockDataProvider:

private static class MyProvider implements MockDataProvider {
    @Override
    public MockResult[] execute(MockExecuteContext ctx) throws SQLException {
        log.trace("SQL = {}", ctx.sql());

        DSLContext create = DSL.using(SQLDialect.MARIADB);
        MockResult[] mockResults = new MockResult[1];

        if (ctx.sql().startsWith("select `gc`.`article`.`id`, `gc`.`familia`.`iva` from")) {
            Record2<Integer, Byte> record2 = create.newRecord(ARTICLE.ID, FAMILIA.IVA);
            log.debug("record2 = " + record2);
            log.debug("record2.value1()={}" + record2.value1());
            Record2<Integer, Byte> values = record2.values(1, (byte) 10);
            log.debug("record2.value1()={}" + record2.value1());
            log.debug("values = " + values);
            mockResults[0] = new MockResult(record2);
        }
        return mockResults;
    }
}

这是不同日志语句的输出:

12:21:05.670 [main] DEBUG net.sargue.gc.test.TestArticleDAO - record2 = +------+------+
|    id|   iva|
+------+------+
|{null}|{null}|
+------+------+
12:21:05.671 [main] DEBUG net.sargue.gc.test.TestArticleDAO - record2.value1()={}null
12:21:05.671 [main] DEBUG net.sargue.gc.test.TestArticleDAO - record2.value1()={}null
12:21:05.671 [main] DEBUG net.sargue.gc.test.TestArticleDAO - values = null

所以它似乎忽略了设置值(第三个日志输出)并且完全 returns null 来自该方法。不确定这是一个错误还是我做错了什么。

顺便说一句,一个一个地设置值似乎没问题。

record2.value1(1)

这就是我现在正在做的解决方法。

有一个不幸的错误 #5042,已在 jOOQ 3.7.3 中修复(并将在 3.6.5 和 3.5.5 中修复)。

那个 values() 方法只添加了 API,没有添加到实现中,which is empty ;)

如果还不能升级,您仍然可以使用单独的设置器(就像您所做的那样)或可以向其传递数组的不安全 Record.from()

// Using from()
record2.from(new Object[] { 1, (byte) 10 });

// Or simpler, using fromArray()
record2.fromArray(1, (byte) 10);