我在使用jOOQ' MockDataProvider
来模拟单元测试中的SQL JOIN时遇到问题。
使用jOOQ实现的JOIN选择包含UUID的单个列。因此,结果类型为Result<Record1<UUID>>
。在相关的单元测试中,我想使用MockDataProvider
来模拟此结果,但我无法找到初始化Result
的正确方法,因为我无法找到方法创建一个像对象的表我可以传递给newResult
方法。我知道table
中有一些DSL
方法,但签名似乎对我的用例不合适。
此时单元测试无法运行,我不确定创建UUID字段的方式是否正确。
这是我的代码:
private class MyProvider implements MockDataProvider {
@Override
public MockResult[] execute(final MockExecuteContext ctx) throws SQLException {
final MockResult[] mockResults = new MockResult[1];
final DSLContext db = DSL.using(SQLDialect.POSTGRES);
final Result<Record1<UUID>> result = db.newResult(<some table object here>);
final Field<UUID> uuidField = DSL.fieldByName(UUID.class, "uuid");
final Record1<UUID> record = db.newRecord(uuidField);
record.setValue(uuidField, ID);
result.add(record);
mockResults[0] = new MockResult(1, result);
return mockResults;
}
}
答案 0 :(得分:1)
我怀疑这与jOOQ用户组的问题基本相同:
https://groups.google.com/forum/#!topic/jooq-user/h4pfIHjmBpo
总之,有一种方法将被添加到jOOQ 3.4(带issue #3139),以帮助您为任意Result
类型创建此类Record
个对象。同时(在jOOQ 3.4发布之前),您将不得不求助于通过反射创建新的org.jooq.impl.ResultImpl
。