【发布时间】:2021-05-16 23:32:54
【问题描述】:
我正在使用jOOQ 来处理关系数据库。我有一个SELECT 查询,我需要为它编写带有模拟的单元测试。基于this doc 和this post,我需要定义自己的数据提供者,它应该看起来像这样:
class MyProvider implements MockDataProvider {
DSLContext create = DSL.using(SQLDialect.MYSQL);
@Override
public MockResult[] execute(MockExecuteContext mockExecuteContext) throws SQLException {
MockResult[] mock = new MockResult[1];
String sql = mockExecuteContext.sql();
if (sql.startsWith("select")) {
Result<Record2<String, String>> result = create.newResult(COL_1, COL_2);
result.add(create.newRecord(COL_1, COL_2)
.values("val1", "val2"));
mock[0] = new MockResult(1, result);
}
return mock;
}
}
其中COL_1和COL_2定义如下:
Field<String> COL_1 = field("Column1", String.class);
Field<String> COL_2 = field("Column2", String.class);
SELECT 很小(如上例中,只有 2 列)时,这非常简单明了。我想知道在复杂和大选择的情况下应该如何完成。例如,我有一个 SELECT 语句,它从多个表连接中选择 30 多个列。似乎与
Result<Record_X<String, ...>> result = create.newResult(COL_1, ...);
result.add(create.newRecord(COL_1, ...)
.values("val1", ...));
在超过 22 列的情况下不起作用。
感谢任何帮助。
【问题讨论】: