【问题标题】:How to stub a method in Mockito whose name is not known until runtime?如何在 Mockito 中存根一个名称直到运行时才知道的方法?
【发布时间】:2011-03-21 15:43:21
【问题描述】:

我想测试在特定测试期间是否调用了特定类中具有已知前缀的每个方法。

我无法找到一种方法来使用 mockito 来存根一个方法,或者当方法名称直到运行时才知道时如何验证该方法是否已被调用。

下面的代码显示了我如何获得我想要存根的方法:

Method[] methodArr = customValidation.getClass().getDeclaredMethods();
loop: for (Method method : methodArr) {
    if (method.getName().startsWith("validate")) {
        // then stub out this method and check whether it gets called
        // after we run some code
    }
}

问题是,如何在运行时之前不知道方法名称的情况下对它们进行存根?

以前有没有人做过类似的事情,或者知道如何做?

非常感谢

【问题讨论】:

    标签: java reflection mocking mockito


    【解决方案1】:

    到目前为止,这似乎是不可能的。有一个unresolved enhancement request

    【讨论】:

      【解决方案2】:

      对于任何感兴趣的人,我使用的解决方案是使用常规模拟来存根我的方法:

      UserBeanValidation userBeanValidation = Mockito.mock(UserBeanValidation.class);
      Mockito.when(userBeanValidation.validateUserId(Mockito.anyString())).thenReturn(validationError);
      

      我验证了它们被调用了一次,并且每当执行其中一个存根方法时都会增加一个计数。可以将此计数与具有特定前缀的方法计数进行比较,以确保调用所有预期的方法:

      int totalMethodCount= 0;
      Method[] methodArr = customValidation.getClass().getDeclaredMethods();
      loop: for (Method method : methodArr) {
      
          if (method.getName().startsWith("validate")) {
              totalMethodCount++;
          }
      }
      
      Assert.assertEquals(totalMethodCount, calledMethodCount);
      

      这样我可以确定我所有的方法都被调用了……现在看看它们是否做了他们应该做的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-15
        • 2019-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        相关资源
        最近更新 更多