doThrow()和之间有什么区别thenThrow()?
假设我们想要模拟身份验证服务来验证用户的登录凭据.如果我们要模拟异常,以下两行之间的区别是什么?
doThrow(new BadCredentialsException("Wrong username/password!")).when(authenticationService).login("user1", "pass1");
Run Code Online (Sandbox Code Playgroud)
VS
when(authenticationService.login("user1", "pass1")).thenThrow(new BadCredentialsException("Wrong username/password!"));
Run Code Online (Sandbox Code Playgroud)
Jef*_*ica 36
几乎没有:在简单的情况下,它们的行为完全相同.该when语法读起来更像是在英语语法的句子.
为什么"差不多"?请注意,该when样式实际上包含一个调用authenticationService.login.这是在该行中评估的第一个表达式,因此无论您在调用期间发生什么行为都会发生when.大多数情况下,这里没有问题:方法调用没有存根行为,所以Mockito只返回一个虚拟值,两个调用完全相同.但是,如果满足以下任一条件,则可能不是这种情况:
在这些情况下,doThrow将调用when(authenticationService)和停用所有危险行为,而when().thenThrow()将调用危险方法并放弃测试.
(当然,对于void方法,你还需要使用doThrow- when如果没有返回值,语法将无法编译.那里别无选择.)
因此,doThrow作为一项规则总是更安全一些,但when().thenThrow()稍微更具可读性,通常是等效的.
| 归档时间: |
|
| 查看次数: |
22097 次 |
| 最近记录: |