【问题标题】:Rest API mocking with wiremock : java使用wiremock进行Rest API模拟:java
【发布时间】:2016-11-22 08:22:55
【问题描述】:

这是我用来模拟服务的实用程序类

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 文件中。

我还通过 GET 调用 /orders/1 调用单个订单。我正在使用文件中的 JSON 对象对其进行响应。但我希望它是动态的。就像我用orders/30 击中它时一样,我应该用id=30 动态获取订单并渲染它。

【问题讨论】:

  • 你能添加你的 json 文件的内容吗?
  • @Areca。它们只是带有 JSON 数组的文件。我看不出与它们的内容相关。你为什么这么问?
  • 如果你的 singleOrder.json 只有一项,你会如何让它动态化?
  • @Areca。在wiremock中存根有两种方式,Java方式(如上所示)和使用json文件(映射目录)。由于我使用的是 Java 方式,因此 json 文件中的内容并不重要,因为我只是将其转换为字符串并将其放入响应正文中。如果您知道如何在 json 文件中存根上述问题,请告诉我。:) 谢谢,如果我错了,请纠正我。 :)
  • @RaghunandanJ 下面汤姆的回答你觉得怎么样?

标签: java json rest api wiremock


【解决方案1】:

目前,如果您想要您描述的那种动态行为,您需要编写一个 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 的转换器来非常简单地完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多