2016-11-22 82 views
1

這是我的實用工具類嘲笑服務REST API與wiremock嘲諷:JAVA

public class MockService { 


    public static void bootUpMockServices() throws IOException { 

     String orderServiceSpecification = readFile("mappings/orderServicesSpecifications.json", Charset.defaultCharset()); 
     String singleOrder = readFile("mappings/singleOrder.json", Charset.defaultCharset()); 


     WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/orders")) 
       .willReturn(WireMock.aResponse() 
         .withStatus(200) 
         .withBody(orderServiceSpecification))); 

     WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/orders/1")) 
       .willReturn(WireMock.aResponse() 
         .withStatus(200) 
         .withBody(singleOrder))); 

    } 

    public static String readFile(String path, Charset encoding) 
      throws IOException { 
     byte[] encoded = Files.readAllBytes(Paths.get(path)); 
     return new String(encoded, encoding); 
    } 

} 

正如你可以看到我嘲笑一個GET調用/orders(所有的訂單),並用身體與響應所有的訂單保存在一個json文件中。

我還打電話給一個單一的訂單,通過致電/orders/1。我用文件中的JSON對象來回應它。但我希望它是動態的。就像當我用orders/30擊中它時,我應該動態獲取id=30的訂單並進行渲染。

+0

你可以添加你的json文件的內容嗎? – Areca

+0

@阿雷卡。他們只是帶有JSON數組的文件。我沒有看到它們的內容的相關性。你爲什麼這樣問? –

+0

如果你的singleOrder.json只有一個項目,你會如何使它動態? – Areca

回答

0

當前,如果您想要描述您所描述類型的動態行爲,您需要編寫一個ResponseDefinitionTransformer,並在構建時將其註冊到WireMockServer或WireMockRule。

這是記錄在這裏:http://wiremock.org/docs/extending-wiremock/#transforming-responses

變壓器實現此示例: https://github.com/tomakehurst/wiremock/blob/master/src/test/java/com/github/tomakehurst/wiremock/ResponseDefinitionTransformerAcceptanceTest.java#L208-L222

你想要做什麼能相當直截了當地用存根映射匹配在URL的正則表達式是這樣做/orders/(\d+)和一個變換器,它解析出數字部分,然後修改ResponseDefinition上的bodyFileName