使用mockserver來進行http接口mock


轉載:http://blog.csdn.net/heymysweetheart/article/details/52227379

前言

進行單元測試時,必須要mock掉第三方的依賴調用,而mockserver提供了足夠的api來支持這種http的mock,現在簡單介紹如何使用mockserver進行http接口mock。

依賴

  • mockserver依賴
    1. <dependency>
    2. <groupId>org.mock-server</groupId>
    3. <artifactId>mockserver-netty</artifactId>
    4. <version>3.10.4</version>
    5. </dependency>
  • httpclient依賴
  1. <dependency>
  2. <groupId>org.apache.httpcomponents</groupId>
  3. <artifactId>httpclient</artifactId>
  4. <version>4.3.3</version>
  5. </dependency>
  6. <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
  7. <dependency>
  8. <groupId>org.apache.httpcomponents</groupId>
  9. <artifactId>httpcore</artifactId>
  10. <version>4.3.2</version>
  11. </dependency>

httpclient的版本可能會出現不一致的情況,拋出異常,以上的這個版本匹配是沒有異常的組合。

舉例

  1. package com.yuliang.dubbo.service;
  2. import org.apache.http.client.methods.CloseableHttpResponse;
  3. import org.apache.http.client.methods.HttpGet;
  4. import org.apache.http.impl.client.CloseableHttpClient;
  5. import org.apache.http.impl.client.HttpClients;
  6. import org.junit.Rule;
  7. import org.junit.Test;
  8. import org.mockserver.client.server.MockServerClient;
  9. import org.mockserver.junit.MockServerRule;
  10. import java.io.BufferedReader;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.io.InputStreamReader;
  14. import static org.hamcrest.CoreMatchers.equalTo;
  15. import static org.hamcrest.MatcherAssert.assertThat;
  16. import static org.mockserver.model.HttpRequest.request;
  17. import static org.mockserver.model.HttpResponse.response;
  18. /**
  19. * Created by leo on 16/8/16.
  20. */
  21. public class MockServerTest {
  22. @Rule
  23. public MockServerRule server = new MockServerRule(this, 5000);
  24. @Test
  25. public void testMockServer() throws IOException {
  26. MockServerClient mockClient = new MockServerClient("localhost", 5000);
  27. String expected = "{ message: 'incorrect username and password combination' }";
  28. mockClient.when(
  29. request()
  30. .withPath("/hello/John")
  31. .withMethod("GET")
  32. // .withHeader(new Header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN))
  33. // .withQueryStringParameter(new Parameter("my-token", "12345"))
  34. ).respond(
  35. response()
  36. .withStatusCode(200)
  37. .withBody(expected)
  38. );
  39. CloseableHttpClient client = HttpClients.createDefault();
  40. HttpGet httpGet = new HttpGet("http://localhost:5000/hello/John");
  41. CloseableHttpResponse response = client.execute(httpGet);
  42. //驗證輸出是否是正確
  43. InputStream content = response.getEntity().getContent();
  44. InputStreamReader inputStreamReader = new InputStreamReader(content);
  45. BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  46. String responseText = bufferedReader.readLine();
  47. assertThat(responseText, equalTo(expected));
  48. }
  49. }

 

  • mock http post請求

    1. @Test
    2. public void testPostMockServer() throws IOException {
    3. MockServerClient mockClient = new MockServerClient("localhost", 5000);
    4. String expected = "You have logged in successfully.";
    5. mockClient.when(
    6. request()
    7. .withPath("/hello/John")
    8. .withMethod("POST")
    9. .withHeader(new Header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN))
    10. // .withQueryStringParameter(new Parameter("my-token", "12345"))
    11. .withBody("username=foo&password=123456")
    12. ).respond(
    13. response()
    14. .withStatusCode(200)
    15. .withBody(expected)
    16. );
    17. CloseableHttpClient client = HttpClients.createDefault();
    18. HttpPost httpPost = new HttpPost("http://localhost:5000/hello/John");
    19. httpPost.addHeader("Accept", "text/plain");
    20. ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    21. nameValuePairs.add(new BasicNameValuePair("username", "foo"));
    22. nameValuePairs.add(new BasicNameValuePair("password", "123456"));
    23. httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    24. CloseableHttpResponse response = client.execute(httpPost);
    25. //驗證輸出是否是正確
    26. InputStream content = response.getEntity().getContent();
    27. InputStreamReader inputStreamReader = new InputStreamReader(content);
    28. BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    29. String responseText = bufferedReader.readLine();
    30. assertThat(responseText, equalTo(expected));
    31. }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM