2017-07-07 19 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>")); 
    } 
}