验证是否使用 mockito 调用了三种方法之一

2022-09-04 22:01:05

我有三种方法,如下所示:

public void method1(String str){
    ...
}

public void method1(String str, String str2, String str3){
    ...
}

public void method1(String str, String str2, Object[] objs, String str3){
    ...
}

我想检查Mockito,如果调用了这些方法中的任何一个,所以我尝试使用anyVararg Matcher:

verify(foo).method1(anyVararg());

但这不会编译“Errors类型中的方法方法1(字符串,字符串)不适用于参数(对象)”

我有两个问题:

  1. 我该如何解决这个问题?
  2. 有没有办法检查是否调用了两种方法中的任何一个?想象一下,我有另一个数学,叫做formress2和formress3。我想检查它们中的任何一个是否被调用(但至少一个)。

谢谢。


答案 1

为此,可以使用 在调用任何方法时递增计数器。Answer

private Answer incrementCounter = new Answer() {
    public Object answer(InvocationOnMock invocation) throws Throwable {
        counter++;
        return null;
    }        
};

请注意,您需要存根所有方法。方法的唯一性基于其签名,而不仅仅是方法名称。两个同名的方法仍然是两个不同的方法。

doAnswer(incrementCounter).when(mockObj.method1(anyString()));
doAnswer(incrementCounter).when(mockObj.method1(anyString(), anyString()));
doAnswer(incrementCounter).when(mockObj.method2(anyString()));

请参阅此处的文档。doAnswer


答案 2

vararg 方法具有如下签名:

public void myMethod(String ... arguments){}

您的方法都不是 vararg 方法。

我不了解Mockito,所以我不能为你解决你的问题,但是除非你使用反射,否则不可能对上述所有三种方法进行抽象,所以我想你将不得不为上述每种方法使用单独的案例。


推荐