Внедрить зависимость ложного служебного объекта в игровой контроллер при юнит-тестировании - PullRequest
0 голосов
/ 09 января 2019

У меня есть контроллер, который выглядит как

class MyController @Inject()(service: MyService,
                                 cc: MessagesControllerComponents
                     )(implicit ec: ExecutionContext)
  extends MessagesAbstractController(cc) {

def getAll ....// all methods of controller

Теперь я пытаюсь выполнить модульное тестирование контроллера, используя Mockito и Scalatest, где я пытаюсь внедрить макетированный объект MyService в модульное тестирование. Мой юнит-тест выглядит следующим образом

class MyControllerTest extends PlaySpec with GuiceOneAppPerSuite {

  "MyController" should {

    def fakeApplication(): Application = new GuiceApplicationBuilder().build()

    "not return 404" when {
      "we try to hit the route /ads" in {
        val fakeRequest = FakeRequest(GET, "/ads")
        val futureResult: Future[Result] = route(fakeApplication, fakeRequest).get
        val resultJson: JsValue = contentAsJson(futureResult)(Timeout(2, TimeUnit.SECONDS))
        resultJson.toString mustBe """{"status":"success"}"""
      }
    }
  }
}

Теперь, чтобы выполнить модульное тестирование контроллера, мне нужно передать макет службы в контроллере при его создании с помощью guice. Я попробовал следующий метод, чтобы внедрить ложную зависимость в контроллере,

val application = new GuiceApplicationBuilder()
  .overrides(bind[MyService])
  .build

Однако он не может внедрить поддельный объект службы. Любые указатели на то, где я иду не так, будут высоко оценены. Заранее спасибо.

1 Ответ

0 голосов
/ 09 января 2019

Вы должны сделать что-то вроде

val application = new GuiceApplicationBuilder()
  .overrides(bind[MyService].toInstance(yourMock))
  .build
...