我正在尝试使用 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)
这就是我现在正在做的解决方法。
有一个不幸的错误 #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);
我是一名优秀的程序员,十分优秀!