2017-07-07 17 views
0

我使用Java Http Client进行WebService调用。需要使用Mockito进行WebService响应(HttpResponse)的Junit测试。如何为Web服务模拟HttpResponse(使用JavaHttpClient)?

Gson gson = new Gson(); 
HttpResponse httpResponse= JavaHttpClient.callWebService("URL",object); 
String json = EntityUtils.toString(httpResponse.getEntity()); 
response = gson.fromJson(json, ClassName.class); 
log.info("Response: " + new Gson().toJson(response)); 

如何设置httpResponse.getEntity()的模拟值?这应该被转换成JSON如上

感谢 Nithyanandanķ

+0

'JavaHttpClient'是静态的吗?如果是这样,它不可能在mockito中,但可以在PowerMock中使用。 – Compass

+0

,我已通过创建界面进行了更改。我需要如何模拟response.getentity()值。 –

+0

然后,您可以模拟该接口,创建一个HttpResponse,并填充虚拟数据,然后通过接口模拟返回。 – Compass

回答

0

下面是一些示例MockServer。根据您的要求修改它。

import static org.mockserver.integration.ClientAndServer.startClientAndServer; 
import static org.mockserver.model.HttpRequest.request; 
import static org.mockserver.model.HttpResponse.response; 

import org.mockserver.client.server.MockServerClient; 
import org.mockserver.initialize.ExpectationInitializer; 
import org.mockserver.model.Header; 
import org.mockserver.model.HttpStatusCode; 

public class MockServerInitializer implements ExpectationInitializer { 

    /** 
    * Standalone mock server 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
    MockServerClient mockServerClient = startClientAndServer(9999); 
    defineMockServerBehaviour(mockServerClient); 
    } 

    @Override 
    public void initializeExpectations(MockServerClient mockServerClient) { 
    defineMockServerBehaviour(mockServerClient); 
    } 

    public static void defineMockServerBehaviour(MockServerClient mockServer) { 

    mockServer.when(
     request() 
     .withMethod("POST") 
     .withPath("/Sample") 
    ).respond(
     response() 
     .withStatusCode(HttpStatusCode.OK_200.code()) 
     .withHeader(Header.header("Content-Type", "application/xml")) 
     .withBody("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + 
      "<Response>\n" + 
      " <responseStatus>OK</responseStatus>\n" + 
      "</Response>")); 
    } 
}