Следующий код возвращает Future.
val findUserFuture: Future[Option[User]] = userRepo.findOne(userKeys)
Затем я обрабатываю Future
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
}
}
Я полагаю, что восстановление будет вызвано, если Future
, возвращенный findOne
, завершится неудачей, т.е. выдаст исключение.Поэтому я имитирую это, заставляя getOneById
выдавать исключение.
when(mockUserRepository.findOne(userKeys)).thenReturn(Future(Some(user)))
when(mockUserRepository.getOneById(userKeys)).thenThrow(classOf[RuntimeException]) //simulating database error
Но модульный тест не вызывает исключение, и тест продолжается с использованием значения Future(Some(User))
.
Iтакже пытался выдать исключение из findOne
- when(mockUserRepository.findOne(userKeys)).thenThrow(classOf[RuntimeException])
, но тестовый пример останавливается со следующими двумя отпечатками, и .recover
из Future
не называется
java.lang.RuntimeException was thrown.
java.lang.RuntimeException