Mockito - 无效使用参数匹配器/ 1匹配器预期,3记录

Krz*_*iek 6 java mockito

我有一个mockito的问题.我收到一个奇怪的错误,我无法解决.

错误:

[error] Invalid use of argument matchers!
[error] 1 matchers expected, 3 recorded:
[error] -> at service.ServiceTest.test(ServiceTest.java:149)
[error] -> at service.ServiceTest.test(ServiceTest.java:149)
[error] -> at service.ServiceTest.test(ServiceTest.java:149)
Run Code Online (Sandbox Code Playgroud)

并且该测试方法旁边的测试方法抛出:

[error] Unfinished stubbing detected here:
[error] -> at service.ServiceTest.test(ServiceTest.java:149)
Run Code Online (Sandbox Code Playgroud)

方法代码:

List<String> method(final Map<String, String> numbersMap, final Map<String, String> invalidNumbersMap, final String filename) {
    //do something
}

protected List<User> run(Map<String, String> numbersMap, final String filename, final Map<String, String> invalidNumbersMap) {
    //do something
    List<String> processedUsedNumbers = method(numbersMap, invalidNumbersMap, filename);
    //do something
    return new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

测试代码(指向此异常)

@Test
public void test() {
    doReturn(new ArrayList<String>()).when(service).method(anyMapOf(String.class, String.class), anyMapOf(String.class, String.class), anyString()); //line 149
    // rest of mocks

    Map<String, String> inputMap = getExampleMap(3); //generate test data
    List<User> result = service.run(inputMap, "file.csv", new HashMap<>());

    // other checks

    verify(service, times(1)).method(eq(inputMap), anyMapOf(String.class, String.class), eq("file.csv"));
}
Run Code Online (Sandbox Code Playgroud)

以这种方式模拟方法'方法':

    when(service.method(anyMapOf(String.class, String.class), anyMapOf(String.class, String.class), anyString())).thenReturn(new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)

没有区别,我仍然从mockito得到同样的例外.

我不知道出了什么问题.进口看起来很好,也使用了params,所以我犯了错误?任何人?

更新/解决方案

好的,我找到了这个错误的原因.更改方法访问修饰符从默认到保护整个测试工作正常.现在,类中的方法看起来像这样:

protected List<String> method(final Map<String, String> numbersMap, final Map<String, String> invalidNumbersMap, final String filename) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

但为什么Mockito会抛出这种例外.这件事与异常消息输出完全无关.