jOOQ:模拟DAO对象

时间:2014-12-14 21:31:38

标签: java sql unit-testing mocking jooq

jOOQ 3.5.0

我正在尝试为使用jOOQ生成的DAO对象的资源编写单元测试。

我注意到DAO层次结构中的一个基类(DAOImpl)有许多final方法,这使得它对mock非常不友好(我将像Powermock这样的字节代码操作符排除在外作为解决方案)。我目前正在使用MockConnectionMockDataProvider模式来填充我的DAO,但似乎这对于断言DAO方法调用来说有点低级。

作为示例,我的资源正在调用FooDao.createFoo(foo),我在测试中的拦截点是MockDataProvider.execute(...),它为我提供了一个带有原始SQL和绑定对象数组值的上下文对象。

为了让测试断言已调用create,我需要评估原始sql。当DAO具有可以断言的漂亮,流畅的方法时,似乎浪费了做这样的事情。

所以我的问题是:有没有更好的单元测试DAO使用方法?好像我需要很多锅炉板才能测试一份简单的合同......

FooDao fooDao = createMock(FooDao.class);
....
when(fooDao.fetchById(id)).thenReturn(foo);

example in the docs更受欢迎。

1 个答案:

答案 0 :(得分:1)

现在,如果不使用像PowerMock那样从字节码中删除final以覆盖这些方法的东西,很难模仿jOOQ DAO。

在即将发布的jOOQ 3.6中,我们计划为DAO实现接口代码生成。那些会更容易嘲笑。

另见: https://github.com/jOOQ/jOOQ/issues/3868