差異處
這裏顯示兩個版本的差異處。
java:wiremock:launch-wiremock-with-mappings-of-junit [2021/08/16 22:55] tony 建立 |
java:wiremock:launch-wiremock-with-mappings-of-junit [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>wiremock}} | ||
- | ====== Launch WireMock with mappings file of JUnit ====== | ||
- | ===== Problem ===== | ||
- | 在解決整合REST外部服務的腳本錄製問題後,接下來就是應用的問題。我想要解決的問題是「該如何在JUnit中啟用預錄好的腳本,讓它取代我所相依的外部服務,讓測試更穩更快減少假警報呢?」本篇分享我的做法。 | ||
- | ===== How to? ===== | ||
- | ==== WireMockRule ==== | ||
- | 這個方法是官網教的,直接使用JUnit的Rule讓它幫你啟動與關閉WireMockServer;如果要載入預錄腳本,就直接指定mappings的上一層即可。以我的範例來說,預錄腳本是放在./testdata/loadMappings/query/mappings中: | ||
- | <code java> | ||
- | public class TestWithWireMockRule { | ||
- | @Rule | ||
- | public WireMockRule wireMockRule = new WireMockRule(WireMockConfiguration.options() | ||
- | .port(80) | ||
- | .httpsPort(443) | ||
- | .usingFilesUnderDirectory("./testdata/loadMappings/query")); | ||
- | |||
- | @Test | ||
- | public void getHttpCode200WhenQueryUser() throws IOException { | ||
- | HttpGet post = new HttpGet("http://localhost/api/users/2"); | ||
- | CloseableHttpClient httpClient = HttpClientFactory.createClient(); | ||
- | try { | ||
- | CloseableHttpResponse response = httpClient.execute(post); | ||
- | assertEquals(200, response.getStatusLine().getStatusCode()); | ||
- | } finally { | ||
- | httpClient.close(); | ||
- | } | ||
- | } | ||
- | } | ||
- | </code> | ||
- | ==== WireMockServer ==== | ||
- | 如果想要在不同測試案例中,載入不同的腳本,可以自己控制WireMockServer啟動與關閉。寫法和WireMockRule大同小異,因為它其實是extendWireMockServer的。 | ||
- | <code java> | ||
- | public class TestWithWireMockServer { | ||
- | private WireMockServer wireMockServer; | ||
- | |||
- | @After | ||
- | public void teardown() { | ||
- | wireMockServer.stop(); | ||
- | } | ||
- | |||
- | private void launchWireMockServer(String testdataPath) { | ||
- | wireMockServer = new WireMockServer(WireMockConfiguration.options() | ||
- | .port(80) | ||
- | .httpsPort(443) | ||
- | .usingFilesUnderDirectory(testdataPath)); | ||
- | wireMockServer.start(); | ||
- | } | ||
- | |||
- | @Test | ||
- | public void getHttpCode200WhenQueryUser() throws IOException { | ||
- | launchWireMockServer("./testdata/loadMappings/query"); | ||
- | |||
- | HttpGet post = new HttpGet("http://localhost/api/users/2"); | ||
- | CloseableHttpClient httpClient = HttpClientFactory.createClient(); | ||
- | try { | ||
- | CloseableHttpResponse response = httpClient.execute(post); | ||
- | assertEquals(200, response.getStatusLine().getStatusCode()); | ||
- | } finally { | ||
- | httpClient.close(); | ||
- | } | ||
- | } | ||
- | |||
- | @Test | ||
- | public void getHttpCode200WhenUpdateUser() throws IOException { | ||
- | launchWireMockServer("./testdata/loadMappings/update"); | ||
- | |||
- | HttpPatch patch = new HttpPatch("http://localhost/api/users/2"); | ||
- | patch.setEntity(new StringEntity("{\"name\":\"morpheus\",\"job\":\"zion resident\"}", "utf-8")); | ||
- | CloseableHttpClient httpClient = HttpClientFactory.createClient(); | ||
- | try { | ||
- | CloseableHttpResponse response = httpClient.execute(patch); | ||
- | assertEquals(200, response.getStatusLine().getStatusCode()); | ||
- | } finally { | ||
- | httpClient.close(); | ||
- | } | ||
- | } | ||
- | } | ||
- | </code> | ||
- | ===== ===== | ||
- | ---- | ||
- | \\ | ||
- | ~~DISQUS~~ |