【发布时间】:2019-03-13 05:51:43
【问题描述】:
以下代码返回一个 Future。
val findUserFuture: Future[Option[User]] = userRepo.findOne(userKeys)
然后我处理未来
findUserFuture.flatMap {....}
.recover{...}
fineOne 返回Future 和Future 对getOneById 的调用
def findOne(userKeys:UserKeys):Future[Option[User]] = {
Future{
//val loginInfo:LoginInfo = LoginInfo(userKeys.providerID,userKeys.authProvider)
val userOption:Option[User] = getOneById(userKeys)
userOption
}
}
我想如果findOne 返回的Future 失败,即抛出异常,将调用recover。所以我通过让getOneById 抛出异常来模拟这一点。
when(mockUserRepository.findOne(userKeys)).thenReturn(Future(Some(user)))
when(mockUserRepository.getOneById(userKeys)).thenThrow(classOf[RuntimeException]) //simulating database error
但是单元测试没有抛出异常,并且测试继续使用值Future(Some(User))。
我也尝试从findOne - when(mockUserRepository.findOne(userKeys)).thenThrow(classOf[RuntimeException]) 抛出异常,但测试用例停止
与以下两个打印和Future 的.recover 未被调用
java.lang.RuntimeException was thrown.
java.lang.RuntimeException
【问题讨论】: