我有一个类
class ServiceA{
public Service2 service2Obj;
public ServiceA(){
}
public ServiceA(Service2 service2Obj){
this.service2Obj = service2Obj;
}
public Response updateMetadata(String templateId,
InputStream metadataStream)
throws InternalServerError,ServiceException,
NotFoundException {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> metadataMap = null;
String status = null;
metadataMap = mapper.readValue(metadataStream, Map.class);
String i = service2Obj.updateMetadataService(templateId, metadataMap);
}
return Response.ok().entity(i).build();
}
}
我的测试用例如下
@Test
public void test(){
Service2 mockService = Mockito.mock(Service2.class);
ServiceA ServiceAObj= new ServiceA(mockService);
Mockito.when(mockService.updateMetadataService("1", readJsonString()))
.thenReturn(readJsonString());
// run method under test
Response response = ServiceAObj.updateMetadata("1",new ByteArrayInputStream(
"{"title":"TEST"}".getBytes());
Assert.assertEquals(200, response.getStatus());
// Parse json and get value from json string
String totalItems = (String) convertMapToJson(
(response.readEntity(Object.class))).get("title");
Mockito.verify(mockDocStoreImpl).updateMetadataService("1",readJsonString()); // getting here error wanted but not invoked
}
public static JSONObject readJsonString(String json)
throws DocGenServiceException {
String json = "{"title":"TEST"}";
JSONObject obj = new JSONObject(json);
return obj;
}
Service2 类在我的 JAR 文件中,这可能是测试失败的原因???我是否应该进行测试以验证 JAR 中的方法,即 Service2 类???我可以使用这个吗 verify(mockService).method2("1");
//我正在使用这个,但收到错误说想要但没有调用
问题是您尝试在 when
语句中匹配的JSONObject
与将传递给方法的不同(对象标识(,以及您在verify
语句中使用的不同。这是因为readJsonString()
每次都会返回一个新对象。
初始化一次JSONOBject
,并将其重用于包装在Mockito.eq()
匹配器中的两个语句。
JSONObject json = readJsonString();
Mockito.when(mockService.updateMetadataService(
Mockito.eq("1"), Mockito.eq(json))).thenReturn(json);
// ...
Mockito.verify(mockDocStoreImpl).updateMetadataService(
Mockito.eq("1"), Mockito.eq(json));