与Mockito模拟泽西客户端客户响应

时间:2014-01-21 21:39:15

标签: 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()?

1 个答案:

答案 0 :(得分:2)

如果我理解你在做什么,你就嘲笑了一个建造者。

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

添加:

builder.type()

(提供 when(builder.entity(anyString())).thenReturn(builder); multiPart