【问题标题】:Using Mockito, how do I intercept a callback object on a void method?使用 Mockito,如何在 void 方法上拦截回调对象?
【发布时间】:2011-04-04 15:35:53
【问题描述】:

我正在使用 mockito 测试旧版 JAAS/LDAP 登录模块。

javax.security.auth.callback.CallbackHandler接口定义了函数:

void handle(javax.security.auth.callback.Callback[] callbacks)

我希望callbacks 包含一个NameCallback,这是需要被操纵才能通过测试的对象。

有没有办法有效地模拟这一点,或者我最好使用CallbackHandler 的存根实现?

【问题讨论】:

    标签: java unit-testing callback jaas mockito


    【解决方案1】:

    对于返回 void 的函数,请使用 doAnswer()

    doAnswer(...).when(mockedObject).handle(any(Callback[].class));
    

    并且执行拦截的Answer 必须作为doAnswer 的参数进入,例如作为一个匿名类:

    new Answer() {
      public Object answer(InvocationOnMock invocation) {
          Object[] args = invocation.getArguments();
          Mock mock = invocation.getMock();
          return null;
      }}
    

    在这种情况下,args 将是数组 Callback[]

    【讨论】:

    • 请直接跳到答案的每个人注意:handle() 方法应该替换为您在课堂上使用的任何方法。我一度感到困惑,因为我使用了 handle() 并认为它是一个 Mockito 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多