【问题标题】:Do we need to stub the other micro service in Spring cloud contract我们是否需要存根 Spring Cloud 合约中的其他微服务
【发布时间】:2018-02-25 12:26:23
【问题描述】:

@marcin

我正在为微服务实施 Spring Cloud 合约的试点,该合约有大约 50 多个相互通信的服务。我有几个问题没有在您的文档中准确找到答案。

我正在构建的服务有控制器,它处理我的输入有效负载并将其转换为所需的 json 格式输出。此 json 用于构建应与 groovy 中的响应匹配的所需结构(我们的合同)。然而,控制器正在通过一些 URL 将 json 发送到另一个服务,如下所示。

request_url=http://localhost:8090/services/rest/transact/v2/pay/validate/0000118228/new response_body=null

基本上,它期望通过使用此 json 和现在的 response_body=null 从其他服务返回响应

我的问题是我需要创建存根或模拟服务吗?将此响应用作输入以从响应中产生预期的输出。基本上,微服务期待ServiceResponse

另一个问题是我们需要在进行合约测试时加载内存数据还是只需要测试控制器本身?

【问题讨论】:

    标签: java spring spring-cloud spring-cloud-contract


    【解决方案1】:

    我并没有真正按照您的描述...“我正在构建的服务具有控制器,它可以转换从 groovy 发送的输入有效负载并以 json 格式提供所需的输出”。从哪个 groovy 发送的? Groovy 应用程序?你能更深入地解释一下吗?

    但我想我无论如何都可以尝试回答这个问题......

    我的问题是我需要创建存根或模拟服务吗?将此响应用作输入以从响应中产生预期的输出。它期待一个 ServiceResponse。

    如果我理解正确 - service 你的意思是一个类而不是一个应用程序?如果是这样的话,是的,在控制器中我会注入一个存根服务。

    另一个问题是我们是否需要在进行合约测试时加载内存中的数据,还是只需要测试控制器本身?

    这与上一个答案有关。您的控制器不会将工作委派给服务的任何实际实现,因此不会发生对数据库的访问。如果您查看示例 (https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/producer/src/test/java/com/example/BeerRestBase.java),您会看到基类中注入了 mock,并且没有发生真正的集成

    编辑:

    “我正在构建的服务具有控制器,它转换我从 groovy 发送的输入有效负载并以 json 格式提供所需的输出”实际上是对通过 Spring Cloud Contract 生成的测试完成的操作的描述。下一句是

    但是,控制器正在将 json 发送到另一个带有一些 URL 的服务,如下所示。

    在合同测试中,我不在乎您的控制器进一步做什么。如果它在您将请求发送到其他应用程序的控制器中,那么您应该将其包装在服务类中。然后,您将在合同测试中模拟这样的服务。我们在 Contract 测试中关心的是我们是否可以沟通。不是整个端到端功能是否正常工作。

    【讨论】:

    • 感谢您的回复。我已经纠正了我的问题。我的是 java 应用程序,但请求和响应是按照 Spring Cloud 合同用 groovy(合同)编写的。
    猜你喜欢
    • 2019-08-12
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2018-10-25
    • 2016-03-27
    • 2023-03-11
    • 2018-10-23
    相关资源
    最近更新 更多