差異處
這裏顯示兩個版本的差異處。
java:wiremock:launch-wiremock-with-mappings-of-junit [2023/06/25 09:48] |
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~~ |