差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

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~~