Mockito doAnswer因未知原因抛出InvalidUseOfMatchersException

时间:2017-02-02 11:49:42

标签: java android mocking mockito

我想模仿PermissionHostCompat类的动作requestPermission(@NonNull String permission, int requestCode)

public class PermissionHostCompat {

    (...)

    public void requestPermission(@NonNull String permission, int requestCode) {
        requestPermissions(new String[]{permission}, requestCode);
    }

    public void requestPermissions(@NonNull String[] permissions, int requestCode) {
        if (activity != null) {
            ActivityCompat.requestPermissions(activity, permissions, requestCode);
        } else if (fragment != null) {
            FragmentCompat.requestPermissions(fragment, permissions, requestCode);
        } else {
            fragmentv4.requestPermissions(permissions, requestCode);
        }
    }

    (...)
}

我是如何做到的:

@Mock
PermissionHostCompat permissionHostCompat;

//...

Answer<Void> requestPermissionAction = new Answer<Void>() {
        public Void answer(InvocationOnMock invocation) {
            // some code
            return null;
        }
    };
doAnswer(requestPermissionAction).when(permissionHostCompat)
    .requestPermission(anyString(), anyInt());

它引发了我的错误:

  

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
无效使用参数匹配器!   预计0匹配,2记录:

     

如果匹配器与原始值组合,则可能会发生此异常:   
//不正确:   
someMethod(anyObject(),&#34; raw String&#34;);   
使用匹配器时,所有参数都必须由匹配器提供。   
例如:   
//正确:   
someMethod(anyObject(),eq(&#34; matcher by matcher&#34;));

我不知道为什么。我还尝试了any(String.class)any(int.class)以及所有选项之间的组合。

我的进口商品:

  

import static org.mockito.Matchers.any;   
import static org.mockito.Matchers.anyInt;   
import static org.mockito.Matchers.anyString;   
import staticorg.mockito.Mockito.doAnswer;   
import static org.mockito.Mockito.when;

Mockito版本:1.10.19

我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试使用Mockito 2.但是应该更改导入:

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Matchers.anyString;