我们是否需要在Spring云合同中存根其他微服务

时间:2017-09-16 13:19:54

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

@marcin

我正在试行实施微服务的Spring云合同,该服务有大约50多个服务相互通信。我几乎没有问题,我在你的文件中没有找到答案。

我正在构建的服务具有控制器,它以json格式处理和转换我的输入有效负载到所需的输出。这个json用于构建所需的结构,该结构应与groovy(我们的合同)中的响应相匹配。然而,控制器正在将json发送到具有某些URL的其他服务,如下所示。

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

基本上,它希望通过使用这个json来回复来自其他服务的响应,现在response_body=null

我的问题是否需要创建存根或模拟服务?利用此响应作为输入以产生响应的预期输出。基本上微服务期望ServiceResponse

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

1 个答案:

答案 0 :(得分: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),您将看到基类注入了模拟并且没有发生真正的集成

修改

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

  

然而,控制器正在将json发送到具有某些URL的其他服务,如下所示。

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