java - 使用 Mockito 模拟 Jersey 客户端 ClientResponse

标签 java unit-testing mockito jersey-client

我在模拟 com.sun.jersey.api.client.ClientResponse 时遇到一些问题,但仅当我设置 .type(MediaType.MULTIPART_FORM_DATA_TYPE.

我被 jersey-client 1.18 困住了。

这是正在测试的代码:

 ClientResponse clientResponse = client.resource(url)
            .accept("application/json")
            .entity(multiPart)
            .type(MediaType.MULTIPART_FORM_DATA_TYPE)
            .post(ClientResponse.class);

这是测试的模拟:

 when(clientResponse.getEntity(String.class)).thenReturn(body);
 when(builder.post(eq(ClientResponse.class))).thenReturn(clientResponse);
 when(builder.type(MediaType.MULTIPART_FORM_DATA_TYPE)).thenReturn(builder);
 when(webResource.accept(anyString())).thenReturn(builder);
 when(client.resource(anyString())).thenReturn(webResource);;

我收到的错误是测试代码行中的 NullPointerException:

 .type(MediaType.MULTIPART_FORM_DATA_TYPE)

有人知道如何模拟 Client.resource().type() 吗?

最佳答案

如果我理解你在做什么,那你就是在 mock 一个建筑商。

您没有包含在 webResource.accept() 返回的 builder 上调用 builder.entity() 的模拟,因此它返回 null 并且链中的下一个调用失败 (builder.type())。

添加:

 when(builder.entity(anyString())).thenReturn(builder);

(假设 multiPartString)

关于java - 使用 Mockito 模拟 Jersey 客户端 ClientResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269649/

相关文章:

android - Mockito lenient() 何时使用

java - 使用 Mockito 在其中调用 new() 测试类

java - 关于从 servlet 提供静态文件的问题

java - 膨胀类 android.support.design.widget.NavigationView 时出错

java - 如何更改日期时间选择器对话框中天数的文本大小?

python - 模拟 pyodbc 模块调用 Django 单元测试

javascript - 使用 setTimeout 测试 IIFE

c# - 无法验证对具有多个接口(interface)的模拟对象上的方法的调用

android - 尝试使用 Mockito 在 Presenter 中测试 void 方法时出现 NullPointerException

java - 防止将重复对象添加到 ArrayList 或 HashSet