Mockito:如何匹配Class <t>

时间:2017-03-20 04:52:25

标签: mockito match

我有一个关于Argument Matcher的问题。

class A(){
   public B method(Class T,String str){} 
}

我将该方法存根并希望传递方法。但是。

  

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:   参数匹配器的使用无效!

A a = new A();
B b = new B();
Mockito.doReturn(b).when(a).method(argThat(new IsClass)), "111");

Class IsClass:

class IsClass extends ArgumentMatcher<Class> {  
    public boolean matches(Object obj) {  
        return true;  
    }  
} 

那么,我该怎么做,可以通过这种方法.Thankyou。

1 个答案:

答案 0 :(得分:3)

完整的异常消息应该告诉您错误:

  

如果匹配器与原始值结合使用,则可能发生此异常:

     

//不正确的:       someMethod(anyObject(),&#34; raw String&#34;);

所以,如果你的isClass()是一个有效的ArgumentMatcher,那么你会像这样存根:

Mockito.doReturn(b).when(a).method(argThat(new IsClass()), eq("111"));
//note how the second parameter of method uses the argument matcher
//"eq" rather than the raw string "111"

此外,如果您只想匹配&#34;任何类对象&#34;你可以这样做,而不必编写自己的自定义匹配器:

Mockito.doReturn(b).when(a).method(any(Class.class), eq("111"));

最后,你只能存根嘲笑。所以你的测试必须包含一些这样的设置代码:

A a = Mockito.mock(A.class);
B b = new B();
Mockito.doReturn(...

考虑花一些时间阅读the documentation以更好地了解如何使用Mockito进行测试。