模拟CrudRepository findById(" 111")。get()

时间:2018-03-20 16:24:12

标签: java spring spring-boot spring-data spring-data-jpa

我需要在我的测试类中模拟Spring crudRepository findById(" 111")。get()

我的代码如下所示,即使按照以下步骤返回null。

(1)我需要测试我的Service类,并创建了serviceTest类并使用了mokito和powermock

(2)有方法,我需要让User给出一个id,其中服务类方法只是调用存储库findById(" 111")。get()并返回User对象

(3)按照这样的方法进行测试

//configuration codes working well
.
.
.
tesst123 () {
.
.
//here some code working well
.
.
.
when (mockRepository.findById("111").get()).thenReturn (new User());

}

在上面我可以模拟mockRepository,并在调试时显示创建的对象。

但是如果我在调试时评估mockRepository.findById(" 111"),它会返回null

如果我在调试时评估mockRepository.findById(" 111")。get()部分,则返回nullPointer异常

****最后我播种.get()方法返回Optional.class,它是最终类

有没有办法嘲笑这种情况?

1 个答案:

答案 0 :(得分:7)

您要模拟的方法返回一个Optional对象。默认情况下,当您不模拟/存根时,Mockito返回返回类型的默认值,即对象引用的null(包括您的大小写中的Optional)或基元的适用值,例如0表示int。

在您的场景中,您试图模拟对依赖方法的结果的get()调用,即findById()。所以根据Mockito的规则,findById()仍然返回null,因为你没有存根

你需要的是这个

tesst123 () {
   //some code as before
   User userToReturn = new User(); 
   when(mockRepository.findById("111")).thenReturn(Optional.of(userToReturn));
   //verifictions as before
 }