java - 如何在 JAR 中模拟服务

标签 java junit mockito

我有一节课

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 与将传递给您的方法的 JSONObject 和您在 verify 语句中使用的 JSONObject 不同(对象标识)。这是因为 readJsonString() 每次都会返回一个新对象。

初始化您的 JSONOBject 一次,并将其重新用于包含在 Mockito.eq() matcher 中的两个语句。 .

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));

关于java - 如何在 JAR 中模拟服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586549/

相关文章:

java - 错误无法实例化类 [org.apache.log4j.rolling.RollingFileAppender]

java - 如何从父类获取执行的Java子类名?

java - Selenium 、Arquillian、Eclipse : trying to make test wait until the page is fully loaded

java - Mockito - 验证递归方法

java - 构建二叉树

java - 用于 couchdb 的 Cloudant 同步;如何将android移植到J2SE

java - 在 Spring 中模拟 @InjectMocks 的方法

java - Spring Boot - MockMVC 创建 bean 时出错

java - ColdFusion 2016 调用 Java TensorFlow API 无法初始化类

java - 仅当 JUnit 测试方法失败时,如何使用 SLF4J 记录 Java 中的语句?