我在使用 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;
}
}
最佳答案
我怀疑这与 jOOQ 用户组中的问题本质上是同一个问题:
https://groups.google.com/forum/#!topic/jooq-user/h4pfIHjmBpo
总之,jOOQ 3.4 中将添加一个方法(使用 issue #3139 ),帮助您为任意 Record
类型创建此类 Result
对象。同时(在 jOOQ 3.4 发布之前),您将不得不通过反射创建一个新的 org.jooq.impl.ResultImpl。
关于java - 为 jOOQ 单元测试创建一个类似对象的任意表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24240295/