【发布时间】:2015-05-18 20:42:57
【问题描述】:
注意:我没有使用 Jooq 的代码生成器
在 DAO 单元测试中,测试 DAO 以确保在插入对象后,DAO 将 Id 设置为由数据库中的 last_insert_id() 返回。因为我使用的是 JOOQ 的 MockConnection 和 MockDataProvider,所以没有联系实际的数据库。
当 DAO 执行以下操作时:
DSLContext ctx = DSL.using(connection, SQLDialect.MYSQL);
//insert
//get id
BigInteger id = ctx.lastId();
JOOQ 执行以下查询:
select last_insert_id() from dual;
在我的 MockDataProvider 中,我检查此查询何时执行并相应地返回结果:
import static org.jooq.impl.DSL.dual;
//other code
@Override
public MockResult[] execute(MockExecuteContext ctx) throws SQLException {
Field<BigInteger> id = DSL.field("", BigInteger.class);
Record record = dual().newRecord();
record.setValue(id, BigInteger.valueOf(1234567));
return new MockResult[] { new MockResult(record) };
}
当返回上面的 MockResult 时,我得到以下异常
java.lang.IllegalArgumentException: Field () is not contained in Row ()
为 last_insert_id() 查询填充 MockResult 的正确方法是什么?
【问题讨论】:
标签: java unit-testing mocking jooq