#scala #unit-testing #mockito #actor
#scala #модульное тестирование #mockito #актер
Вопрос:
val users = List(User(name = "A"))
val userRepoMock = mock[UserRepo]
"GET /users" should {
"return the users" in {
when(userRepoMock.get()).thenReturn(Future.successful(Good(users)))
Когда я запускаю тест, он не компилируется
value thenReturn is not a member of Nothing
[error] L55:
when(userRepoMock.get()).thenReturn(Future.successful(Good(users)))
[error] L55:
Кто-нибудь может помочь мне исправить эту проблему, пожалуйста?
Заранее спасибо
Вот определение UserRepo
trait UserRepo {
def get(): Future[List[User]]
}
object UserRepo {
class ActorImpl @Inject()(actor: UserSyncActor.Ref) extends UserRepo {
override def get(): Future[List[User]] = {
implicit val timeout: Timeout = 10.seconds
actor.ref.ask(UserSyncActor.GetUsers).mapTo[List[User]]
}
}
}
Я также связал UserRepo с его ActorImpl в модуле
class ActorsModule extends AbstractModule {
...
override def configure(): Unit = {
val _ = bind(classOf[UserRepo]).to(classOf[UserRepo.ActorImpl])
}
}
Комментарии:
1. Я не совсем уверен, как это компилируется. Future[Хороший[список [пользователей]]] не того же типа, что и Future[Список [пользователей]]]. При попытке написать этот макет вы должны получить ошибку компиляции. Возможно, если вы поместите весь тестовый код, было бы легче увидеть, что именно происходит.
Ответ №1:
Недавно я столкнулся с аналогичной проблемой, для меня проблема заключалась в том, что то, что я возвращал внутри thenReturn()
, отличалось от того, что должна возвращать функция, над которой я издевался.
В вашем случае я бы дважды проверил, что Future.successful(Good(users))
есть Future[List[User]]
, но это сообщение об ошибке довольно расплывчатое и бесполезное, поэтому может быть что-то еще