为了账号安全,请及时绑定邮箱和手机立即绑定

Mockito-doReturn()和when()之间的区别

Mockito-doReturn()和when()之间的区别

我目前正在使用Mockito在Spring MVC应用程序中模拟我的服务层对象,在该应用程序中我想测试我的Controller方法。但是,当我阅读Mockito的细节时,我发现这些方法doReturn(...).when(...)等效于when(...).thenReturn(...)。所以,我的问题是什么是有两个方法,做同样的事情或之间有什么细微的区别点doReturn(...).when(...)和when(...).thenReturn(...)?任何帮助,将不胜感激。
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

如果您使用间谍对象(标有@Spy)而不是模拟对象(标有),则两种方法的行为会有所不同@Mock:


when(...) thenReturn(...) 在返回指定值之前进行真正的方法调用。因此,如果被调用的方法引发Exception,则必须对其进行处理/模拟。等等。当然,您仍然可以获得结果(在中定义thenReturn(...))


doReturn(...) when(...) 根本不调用该方法。


例:


public class MyClass {

     protected String methodToBeTested() {

           return anotherMethodInClass();

     }


     protected String anotherMethodInClass() {

          throw new NullPointerException();

     }

}

测试:


@Spy

private MyClass myClass;


// ...


// would work fine

doReturn("test").when(myClass).anotherMethodInClass();


// would throw a NullPointerException

when(myClass.anotherMethodInClass()).thenReturn("test");


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 6892 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信