如何模拟以下代码行
WebResource jobBuilder = restClient.resource(jobBuilderUrl);
String jobXml = jobBuilder
.accept(MediaType.APPLICATION_XML)
.type(MediaType.APPLICATION_JSON)
.entity(request)
.post(String.class);我尝试使用下面的代码使用简单的模拟来模拟它,但它返回了一个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);发布于 2013-05-07 08:29:32
如何模拟以下代码行
不要,它没有任何价值。相反,启动一个嵌入式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请求,但都需要不同的紧密耦合的测试代码。这不是你想要的测试结果。
发布于 2014-08-07 05:45:26
我也得到了NullPointerException。我通过从accept()的调用中返回一个模拟生成器对象来解决这个问题。
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);做了我期望的事情。
https://stackoverflow.com/questions/16406365
复制相似问题