如何模拟/存根jOOQ UpdatableRecordImpl store()方法?

时间:2018-07-25 14:29:36

标签: java unit-testing jooq

我已经设法存根update():

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

但是,当我尝试存根store()时:

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

我得到了错误:

  

org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
  整数   不能由fieldsRow()返回fieldsRow()应该返回Row

     
     

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

     
      
  1. 此错误可能发生在错误编写的多线程测试中。请参考Mockito常见问题的并发限制   测试。
  2.   
  3. 使用when(spy.foo())。then()语法对间谍进行打桩。对间谍进行存根比较安全-      
        
    • 具有doReturn | Throw()系列方法。 javadoc中有关Mockito.spy()方法的更多信息。
    •   
  4.   

如何对 store()方法存根?

1 个答案:

答案 0 :(得分:0)

您不能使用Mockito模拟store()方法,因为它是final方法,并且Mockito不提供模拟最终方法的支持。您可以做的是:

  • 对于单元测试,请使用PowerMock(它提供了一种模拟最终方法的方法,但它对Spring不友好。仅在您使用Spring时提及),
  • 对于功能测试,创建嵌入式数据库模式,并配置您的JOOQ以在 testing 环境中使用此模式。

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