我正在尝试使用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)
这就是我现在所做的解决方法。
答案 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);