ошибка scala mockito `значение thenReturn не является членом Nothing`

#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]] , но это сообщение об ошибке довольно расплывчатое и бесполезное, поэтому может быть что-то еще