首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法检查是否在Mockito中调用了间谍方法

无法检查是否在Mockito中调用了间谍方法
EN

Stack Overflow用户
提问于 2019-04-17 01:15:57
回答 1查看 16关注 0票数 0

我有一个调用另一个类的discard方法的signout方法。我想测试一下,当signout被调用时,discard被调用一次。我尝试在AuthenticatorService上执行spy,然后检查是否调用了它的discard方法,但得到了错误

代码语言:javascript
复制
Wanted but not invoked:
fakeJWTAuthenticatorService.discard(
    <any>,
    <any>,
    <any>
);

要测试的方法是

代码语言:javascript
复制
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
  }

我写的测试用例是

代码语言:javascript
复制
  "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())
    }
  }
EN

回答 1

Stack Overflow用户

发布于 2019-04-18 00:37:33

你能让testEnv.fakeSilhouette.env.authenticatorService本身返回的对象成为一个模拟的对象吗?这将是处理这一问题的理想方法。如果您正在测试类A,您希望使用mock来消除对其他类(如类B)的依赖,这样您就可以将测试的重点放在A的代码上。在本例中,您测试的是signout方法,它似乎依赖于身份验证器服务。您能否注入此依赖项,以便signout方法使用的身份验证器服务是mock而不是spy?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55713446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档