java - 为 jOOQ 单元测试创​​建一个类似对象的任意表

标签 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;
    }
}

最佳答案

我怀疑这与 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/

相关文章:

javascript - 测试包含异步代码的函数

java - 什么是 Java 中的测试驱动开发 (TDD) 以及如何自动化测试用例

java - 模拟类将 null 分配给 @NonNull 字段(Android)

MySQL Join 三个表返回多个结果

sql - 使用 SQL 用另外 3 个字符更新字符串的前 7 个字符,抛出 "Error 19 - UNIQUE constraint failed: MGOFile.File."

r - mockery::mock 和 mockery::stub 不能与准引用一起正常工作?

java - setPressed 不起作用

java - 是否可以为不同的组件设置不同的外观?

java - Elasticsearch 分组并选取具有最大时间戳的文档

sql - Oracle 数据库 sql 查询。有吗?