如何模拟以下代码行
WebResource jobBuilder = restClient.resource(jobBuilderUrl);
String jobXml = jobBuilder
.accept(MediaType.APPLICATION_XML)
.type(MediaType.APPLICATION_JSON)
.entity(request)
.post(String.class);
我试图使用以下代码使用easy mock来模拟它,但它返回一个NullPointerException
WebResource jobBuilder = EasyMock.createMock(WebResource.class);
expect(jobBuilder
.accept(MediaType.APPLICATION_XML)
.type(MediaType.APPLICATION_JSON)
.entity(EasyMock.notNull())
.post(String.class)).andReturn("<test></test>");
replay(jobBuilder);
答案 0 :(得分:1)
如何模拟以下代码行
别。它没有任何价值。而是启动嵌入式HTTP服务器并验证它是否接收到您期望的请求。这就是你在编写这段代码时真正关心的问题,这就是你应该测试的内容。使用Simple Framework或Jetty非常容易。
案例:
jobBuilder
.accept(MediaType.APPLICATION_XML)
.type(MediaType.APPLICATION_JSON)
.entity(request)
.post(String.class);
与:
相同jobBuilder
.accept(MediaType.APPLICATION_XML)
.entity(request)
.type(MediaType.APPLICATION_JSON)
.post(String.class);
与:
相同jobBuilder
.accept(MediaType.APPLICATION_XML)
.type(MediaType.APPLICATION_JSON)
.post(String.class, entity);
......等等。所有都创建相同的HTTP请求,但所有都需要不同且紧密耦合的测试代码。这不是你想要的测试方式。
答案 1 :(得分:0)
我也得到了NullPointerException。我通过从调用accept()
返回一个Mock Builder对象来解决它ClientResponse clientResponse = createMock(ClientResponse.class);
expect(clientResponse.getStatus()).andReturn(200).anyTimes();
expect(clientResponse.getEntity(FOO.class)).andReturn(jobInfo).anyTimes();
replay(clientResponse);
Builder builder = createMock(Builder.class);
expect(builder.get(ClientResponse.class)).andReturn(clientResponse).anyTimes();
replay(builder);
WebResource jobResource = createMock(WebResource.class);
expect(jobResource.accept(MediaType.APPLICATION_JSON)).andReturn(builder).anyTimes();
replay(jobResource);
现在我的生产代码中的调用
ClientResponse response = this.jobResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
FOO foo = response.getEntity(FOO.class);
做我期望的事。