如何mock/stub jOOQ UpdatableRecordImpl store()方法



我已经设法存根update((:

@Test
public void updateStubbed() {
UpdatableRecordTest updatableRecordTest = spy(new UpdatableRecordTest());
doReturn(1).when(updatableRecordTest).update();
}

然而,当我尝试存根存储((时:

@Test
public void storeStubbed() {
UpdatableRecordTest updatableRecordTest = spy(new UpdatableRecordTest());
doReturn(1).when(updatableRecordTest).store();
}

我得到错误:

org.mockito.exceptions.missing.FrongTypeOfReturnValue:
整数不能由fieldsRow((返回fieldsRow((应返回行


如果您不确定为什么会出现上述错误,请继续阅读。由于语法的性质,可能会出现上述问题,因为:

  1. 此异常可能发生在错误编写的多线程测试中。请参阅Mockito关于并发限制的常见问题解答测试
  2. 间谍使用when(spy.foo(((.then((语法进行存根。拦截间谍更安全——
    • 使用doReturn|Throw((方法家族。有关Mockito.spy((方法的更多信息,请参阅javadocs

如何存根store((方法?

不能用Mockito模拟store()方法,因为它是final方法,而且Mockito不支持模拟final方法。你能做的是:

  • 对于单元测试,使用PowerMock(它提供了一种模拟最终方法的方法,但对Spring不友好。只是在使用Spring的情况下提到(
  • 对于功能测试,创建嵌入式DB模式,并将JOOQ配置为在测试环境中使用此模式

不幸的是,我没有更好的答案。

最新更新