代码之家  ›  专栏  ›  技术社区  ›  LiranBo

带有模拟字段的JOOQ模拟结果

  •  3
  • LiranBo  · 技术社区  · 7 年前

    我正在为一个使用JOOQ库通过SQL进行查询的项目编写UT,我需要模拟SQL响应。

    我试过跟踪 this manual 然而,我们将JOOQ与纯SQL结合使用,这意味着我们没有任何用于字段或表的预定义类。

    我的问题是-在不提供字段作为参数的情况下,如何定义结果对象?或者定义模拟字段参数?

            Result<Record2<Integer, String>> result = create.newResult(AUTHOR.ID, AUTHOR.LAST_NAME);    // replace the AUTHOR.ID and AUTHOR.LAST_NAME with some string for example
            result.add(create.newRecord(AUTHOR.ID, AUTHOR.LAST_NAME));
            result.get(0).setValue(AUTHOR.ID, 1);
            result.get(0).setValue(AUTHOR.LAST_NAME, "Orwell");
            mock[0] = new MockResult(1, result);
    

    我注意到我可以定义一个新字段,但该字段实现的接口非常广泛,所以我正在寻找更简单的接口。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  4
  •   Lukas Eder    7 年前

    无论何时在没有代码生成器的情况下使用jOOQ,都需要构造 Table Field 使用普通SQL API动态引用。引用您的示例:

    // Dynamic field creation
    Field<Integer> id = field(name("AUTHOR", "ID"), SQLDataType.INTEGER);
    Field<String> lastName = field(name("AUTHOR", "LAST_NAME"), SQLDataType.VARCHAR);
    
    // Same as before
    Result<Record2<Integer, String>> result = create.newResult(id, lastName);
    result.add(create.newRecord(id, lastName).values(1, "Orwell"));
    mock[0] = new MockResult(1, result);
    

    详见本手册以下章节: