获取错误-Mockito中的InvalidUseOfMatchersException



我有一个下面的方法:

public Response getAbcExample(Double a, Double b, Integer c, String d, RequestHeader requestHeader)
throws Exception  {
Map<String, String> logMap = new HashMap<>();
Response response = new Response();
String jsonString = _getAB_Exampe(a, b, c, requestHeader);
}

我的mockito方法低于

@Test
public void getabc_Example_Success() throws IOException{
Response response=new Response();
RequestHeader requestHeaders=new RequestHeader();
response.setMessage("Success");
response.setStatusCode("200");          
when(abc.getabc_Example_Success(anyDouble(),anyDouble(),anyInt(),anyString(),requestHeaders)).thenReturn(response);
Mockito.verify(abc,Mockito.times(1)).getabcExable(Mockito.any(Double.class),Mockito.any(Double.class),Mockito.any(Integer.class),Mockito.eq(""),Mockito.any(RequestHeader.class));      
}

但我得到了:

org.mockito.exceptions.missing.InvalidUseOfMatchersException.

我的代码测试实际方法是否正确,还是需要更改?。我想把所有的线路都装上测试箱。

我根据您的代码进行了一些测试,下面是一些见解。。

1)您不需要使用doReturn().when()..语法。。在您的情况下,when().thenReturn()是可以的(尽管您仍然可以坚持使用其他版本,这取决于您自己)。

2)不确定如何实例化'abc'对象。。但它必须是@Mock@Spy,否则您无法在其上使用when().thenReturn()功能。

3)在when()中。。您正在将any()与没有匹配器的真实对象(requstHeaders对象)结合使用:

when(abc.getabc_Example_Success(anyDouble(),anyDouble()
,anyInt(),anyString(),requestHeaders));

你不能这样做,Mockito会抛出一个错误:

This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));

您已将其设置为Mockito.any(RequestHeaders.class)Mockito.eq(requestHeaders)

工作解决方案

因此,基于以上内容,您的测试类应该或多或少地如下所示:

@Spy
private Abc abc;
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
@Test
public void tst() throws Exception{
Response response= mock(Response.class);
RequestHeader requestHeaders=mock(RequestHeader.class);
when(a.getAbcExample(anyDouble(),anyDouble(),anyInt()
,anyString(),Mockito.eq(requestHeaders))).thenReturn(response);
abc.getAbcExample(1.0, 1.0, 1, "", requestHeaders); // invoke the mocked method
verify(a, times(1)).getAbcExample(Mockito.any(Double.class)
,Mockito.any(Double.class),Mockito.any(Integer.class)
,Mockito.eq(""),Mockito.any(RequestHeader.class));

}
}

或者:

  • 你可以用@Mock代替@Spy
  • verify.中的最后一个参数。。Mockito.any(RequestHeader.class)。这可以替换为实际的requestHeaders对象,并且仍然有效

试试看。

相关内容

  • 没有找到相关文章

最新更新