我想测试在特定测试期间调用特定类中具有已知前缀的每个方法。
我无法找到一种方法来使用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
}
}
问题是,如何在不知道方法名称的情况下将它们存根直到运行时?
有没有人之前做过这样的事情,或者知道如何做到这一点?
非常感谢
答案 0 :(得分:1)
目前似乎无法做到这一点。有一个unresolved enhancement request
答案 1 :(得分:1)
对于任何有兴趣的人,我使用的解决方案是使用常规模拟来存储我的方法:
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);
通过这种方式,我可以确定我的所有方法都被调用了......现在要知道他们是否按照自己的意愿行事。