2016-11-22 170 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