如何构造org.jooq.Result进行单元测试
How to construct org.jooq.Result for unit testing
我正在编写单元测试以使用 JOOQ 库从 Oracle DB 中获取记录,我需要模拟 DSLContext
的 fetch()
函数返回的数据。如何创建由模拟函数返回的示例 Result<Record>
?我在谷歌上搜索了几个小时,找不到答案。
尝试使用JOOQ自己的模拟API。这里是官方docs
您可能希望以这样的方式结束:
final MockDataProvider myMockProvider = new MockDataProvider() {
@Override
public MockResult[] execute(final MockExecuteContext context) throws SQLException {
final DSLContext context = DSL.using(SQLDialect.ORACLE);
final Result<Record> resultRecord = context.newResult(YOUR_TABLE_HERE);
// customize your record with needed fields
resultRecord.add(context.newRecord(YOUR_TABLE_HERE));
return new MockResult[] { new MockResult(1, resultRecord) };
}
};
final DSLContext mockedDSL = DSL.using(new MockConnection(myMockProvider), SQLDialect.ORACLE);
// here you go with your tests
我遇到过同样的问题,我不想 MockDataProvider
,因为我正在测试 DAO 以外的东西。因此,我创建了一个简单的函数,以便将 Record
(或多个)转换为 Result<T>
。
请注意,这是在 Kotlin 中,但应该很容易将其翻译成 Java:
val jooq = DSL.using(SQLDialect.POSTGRES)
fun <T : Record> result(table: TableImpl<T>, vararg data: T): Result<T> {
return jooq.newResult(table).apply { addAll(data) }
}
然后可以按如下方式使用:
result(TABLE_NAME, <a record>, <another record>)
而且记录只能使用它们的构造函数来创建。
我正在编写单元测试以使用 JOOQ 库从 Oracle DB 中获取记录,我需要模拟 DSLContext
的 fetch()
函数返回的数据。如何创建由模拟函数返回的示例 Result<Record>
?我在谷歌上搜索了几个小时,找不到答案。
尝试使用JOOQ自己的模拟API。这里是官方docs
您可能希望以这样的方式结束:
final MockDataProvider myMockProvider = new MockDataProvider() {
@Override
public MockResult[] execute(final MockExecuteContext context) throws SQLException {
final DSLContext context = DSL.using(SQLDialect.ORACLE);
final Result<Record> resultRecord = context.newResult(YOUR_TABLE_HERE);
// customize your record with needed fields
resultRecord.add(context.newRecord(YOUR_TABLE_HERE));
return new MockResult[] { new MockResult(1, resultRecord) };
}
};
final DSLContext mockedDSL = DSL.using(new MockConnection(myMockProvider), SQLDialect.ORACLE);
// here you go with your tests
我遇到过同样的问题,我不想 MockDataProvider
,因为我正在测试 DAO 以外的东西。因此,我创建了一个简单的函数,以便将 Record
(或多个)转换为 Result<T>
。
请注意,这是在 Kotlin 中,但应该很容易将其翻译成 Java:
val jooq = DSL.using(SQLDialect.POSTGRES)
fun <T : Record> result(table: TableImpl<T>, vararg data: T): Result<T> {
return jooq.newResult(table).apply { addAll(data) }
}
然后可以按如下方式使用:
result(TABLE_NAME, <a record>, <another record>)
而且记录只能使用它们的构造函数来创建。