невозможно проверить, что в Mockito был вызван шпионский метод - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть метод signout, который вызывает метод discard другого класса. Я хочу проверить, что когда вызывается signout, то discard вызывается один раз. Я пытаюсь spy на AuthenticatorService, а затем проверить, что его discard метод был вызван, но я получаю ошибку

Wanted but not invoked:
fakeJWTAuthenticatorService.discard(
    <any>,
    <any>,
    <any>
);

Метод проверки

def signOutUser = silhouette.SecuredAction.async { implicit request =>

    silhouette.env.authenticatorService.discard(request.authenticator, Ok(Json.toJson(JsonResultSuccess(messagesApi("success.signoutSuccessful")(langs.availables(0)))))) //I want to test that `discard` is called once
  }

Тестовый пример, который я написал, -

  "signOutUser" should {
    "should be called when signout request is received" in {
      val testEnv = new TestEnv(components = components)

      val request = FakeRequest("POST", "ws/users/user-signout").withAuthenticator(testEnv.loginInfo)(testEnv.fakeEnv)
      //spying calls the real method.
      val authenticatorServiceSpy = Mockito.spy(testEnv.fakeSilhouette.env.authenticatorService)
      val response = testEnv.controller.signOutUser(request)
      val responseBody = contentAsJson(response)
      println(s"response is ${responseBody}")
      val result = (responseBody \ "result").get.as[String]
      val message = (responseBody \ "additional-info").get.as[String]

      result mustBe "success"
      verify(authenticatorServiceSpy,times(1)).discard(ArgumentMatchers.any[JWTAuthenticator],ArgumentMatchers.any())(ArgumentMatchers.any())
    }
  }

1 Ответ

0 голосов
/ 17 апреля 2019

Можете ли вы сделать объект, возвращаемый testEnv.fakeSilhouette.env.authenticatorService, самим собой? Это был бы идеальный способ справиться с этим. Если вы тестируете класс A, вы хотите использовать mocks для устранения зависимостей от другого класса (например, класса B), чтобы вы могли сфокусировать свой тест только на коде A. В этом случае вы тестируете метод выхода, и он, похоже, зависит от службы аутентификатора. Можете ли вы внедрить эту зависимость, чтобы служба аутентификации, используемая методом выхода, была ложной, а не шпионской?

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