为jOOQ单元测试创​​建一个像对象一样的任意表

时间:2014-06-16 09:18:35

标签: java sql unit-testing mocking jooq

我在使用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;
    }
}

1 个答案:

答案 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