如何在jOOQ的MockDataProvider中创建包含样本数据的自定义记录?

时间:2016-03-17 11:39:02

标签: java unit-testing mocking jooq

我正在尝试使用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

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

顺便说一下,逐个设置值似乎没问题。

record2.value1(1)

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

1 个答案:

答案 0 :(得分:0)

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

values()方法仅添加了API,而不是实现,which is empty;)

如果还没有升级的可能性,您仍然可以使用单独的setter(就像你做的那样)或者可以传递数组的不安全的Record.from()

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

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