Jooq 模拟 fetchInto

Jooq mock fetchInto

据我所知,mock jooq 请求的结果是可能的。但是可以模拟 fetchInto 函数吗?

我有这个代码

val addressSaved = dsl.selectFrom(address)
        .where(address.CITY.eq(city))
        .fetchOneInto(Address::class.java)

我只想模拟 fetchOneInto。我认为这将使测试更容易。

如何模拟 xyzInto(Class<E>) 方法

您可以使用单个 SPI 替换所有 xyzInto(Class<E>) 样式方法的实现:RecordMapperProvider 如此处记录: https://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos-with-recordmapper-provider/

这样一来,无论您的具体查询如何,您始终可以填充 Address class(甚至其他子class)的自定义实现。不过,您仍然需要模拟语句本身。可能再次使用您已经发现的 MockConnection

模拟与集成测试

您可能已经就模拟测试与集成测试做出了明智的决定,但是对于这个问题的未来访问者,我仍然提到这个:

一般来说,将您的代码与您的实际数据库进行集成测试(例如使用 testcontainers)要容易得多,也更有用,如果您必须模拟事物以测试更高级别的逻辑,那么模拟您的服务,而不是 jOOQ SQL 语句。