не смоделировать игру api Запрос - PullRequest
0 голосов
/ 09 июля 2019

У меня есть класс, который получает Option[Request[_]] как неявный (play.api.mvc.Request):

class MyClass @Inject()(...)(implicit val request: Option[Request[_]]) { ...

моя проблема в моем тесте, я использую play.api.test.inject как:

  val myClass: MyClass = inject[MyClass]

и чтобы сделать это в моем тесте, я должен сделать этот запрос неявным. так что я сделал с mockito.ArgumentMatchers вот так:

  implicit val origReq: Option[Request[_]] = any[Option[Request[_]]]

но когда я запускаю тест, я получаю эту ошибку:

An exception or error caused a run to abort: Guice configuration errors:

1) No implementation for scala.Option<play.api.mvc.Request<?>> was bound.
  while locating scala.Option<play.api.mvc.Request<?>>
    for the 3rd parameter of streams.MyClass.<init>(MyClass.scala:16)
  while locating streams.MyClass

1 error 
com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for scala.Option<play.api.mvc.Request<?>> was bound.
  while locating scala.Option<play.api.mvc.Request<?>>
    for the 3rd parameter of streams.MyClass.<init>(MyClass.scala:16)
  while locating streams.MyClass

что я делаю не так? : /

1 Ответ

0 голосов
/ 10 июля 2019

Проблема в том, что вы определяете класс, для которого создается экземпляр guice, для которого требуется необязательный запрос, очень вероятно, что вам нужно, чтобы этот запрос был фактически ограничен запросом (другой объект в каждом запросе), который не прост в игре.

Я не знаю, как ведет себя inject[MyClass], я полагаю, что он не будет искать неявный необязательный запрос в области, но попытается создать экземпляр MyClass с использованием доступных модулей (привязки Just In Time не выполняются) этого недостаточно, потому что Request[_] не является конкретным, вы можете пройти тесты, определив конкретную привязку для вашего теста, но заставить приложение работать не так просто), в любом случае, предоставление объектов с универсальными типами не это просто, поскольку существует множество возможных реализаций для одного Request[_], подумайте о замене _ на Int, String и т. д.

Хорошей идеей было бы реорганизовать MyClass, чтобы вместо этого потребовать неявный запрос для каждого метода, что решает проблемную подготовку.

Если вы все еще хотите выполнить неявный запрос к конструктору, вам нужно изучить привязки в области запроса при воспроизведении, что само по себе является темой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...