我有一个下面的方法:
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
对象,并且仍然有效
试试看。