【问题标题】:How to write Integration test for a microservice if it calling another microservice如果调用另一个微服务,如何为微服务编写集成测试
【发布时间】:2022-01-07 15:04:43
【问题描述】:

我正在为我的功能编写集成测试(此处称为 IT)。在我的要求中,我需要调用另一个服务来更新数据。这些服务不能在本地运行,所以不能运行 Postman。所以只有我可以使用它。

前。 我有 2 个服务 serviceA 和 serviceB ,在微服务 serviceA 中,我正在编写代码我的功能逻辑并更新 DB 中的一些数据(serviceB 的另一个模式)我需要调用 serviceB。 我已经在 A 中编写了代码,现在我正在拨打电话

public void addUToG(UGT ugt, String accessToken)  {
    try {
        String url = ServiceB_Baseurl + "/" + id + "/works";
        HttpResponse response = httpUtil.putRequest(url, accessToken,
                ContentType.APPLICATION_JSON.toString(),
                mapper.writeValueAsString(ugt));
        if (response != null && response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
            logger.warn("Failed ");
        }
    }
    catch(Exception e) {
        logger.warn("Exception ", e);
    }
}

在这里我调用了其他服务,但我需要通过 IT 对其进行测试,并且我无法运行邮递员,因为这些服务无法在本地运行。 所以我不知道我能做些什么来测试它?任何建议都会很有帮助。

TIA ????

【问题讨论】:

    标签: java spring-boot junit integration-testing


    【解决方案1】:

    我无法运行邮递员,因为这些服务无法在本地运行

    这基本上意味着您没有调用其他服务的选项,因为它没有运行。

    但同时,如果你想在当前服务中测试你的逻辑,那么你肯定需要mock这个 API 调用。

    究竟如何模拟它取决于您的实现,但我建议先概述Mockito 框架。

    根据提供的代码 sn-p,您可以模拟 httpUtil 的实例。 在这种情况下,httpUtil.putRequest(...) 不会调用 serviceB 的真正 API,而是使用您提供的响应进行测试。

    【讨论】:

      【解决方案2】:

      如果您不进行实际的 e2e 测试,您可以使用模拟 http 服务器(如wiremock 和存根响应)将其包含在集成测试中。

      【讨论】:

        【解决方案3】:

        为了测试您的被测微服务 (SUT),您将使用 test double 来模拟相关组件。您可以使用API mocking 工具之一来模拟/模拟微服务B,如下图所示。

        例如,您可以使用this Wikipedia page 中列出的工具之一:

        有关测试微服务时的更多详细信息和选项,我建议查看“Testing Microservices: an Overview of 12 Useful Techniques”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-27
          • 2020-03-18
          • 2019-11-02
          • 2018-12-27
          • 2018-03-04
          • 2016-01-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多