Как переопределить TypeLiteral в Scala Guice при тестировании - PullRequest
1 голос
/ 20 июня 2019

В моем Module.scala я привязываю конкретную реализацию черты, определенной следующим образом:

trait AccessGroupRepository[F[_]] {}

@Singleton
class AccessGroupRepositoryImpl @Inject()(db: OldDataBase, c: IOContextShift)
    extends AccessGroupRepository[IO] {}

, и привязка выполняется с использованием TypeLiteral:

bind(new TypeLiteral[AccessGroupRepository[IO]] {}).to(classOf[AccessGroupRepositoryImpl])

Теперь мне нужно переопределить эту привязку при тестировании с макетом Mockito:

override val application: Application = guiceApplicationBuilder
    .overrides(bind(new TypeLiteral[AccessGroupRepository[IO]] {}).to(agRepoMock))

, но я получаю следующую ошибку:

overloaded method value bind with alternatives:
[error]   [T](implicit evidence$1: scala.reflect.ClassTag[T])play.api.inject.BindingKey[T] <and>
[error]   [T](clazz: Class[T])play.api.inject.BindingKey[T]
[error]  cannot be applied to (com.google.inject.TypeLiteral[api.v1.accessgroup.AccessGroupRepository[cats.effect.IO]])
[error]     .overrides(bind(repoTypeLiteral).to(agRepoMock))
[error]                ^

Как я могу решить эту проблему?

Этот вопрос относится к Как связать класс, расширяющий Trait, с параметром монадического типа, используя Scala Guice?

...