@marcin
我正在为微服务实施Spring Cloud合约进行试点,其中大约有50个服务相互通信。我有几个问题,我在您的文档中没有找到确切的答案。
我正在构建的服务具有控制器,该控制器以json格式处理并将我的输入负载转换为所需的输出。此json用于构建所需的结构,该结构应与groovy(我们的合同)中的响应相匹配。然而,控制器正在将json发送到具有一些URL的另一个服务,如下所示。
request_url=http://localhost:8090/services/rest/transact/v2/pay/validate/0000118228/newresponse_body=null
基本上,它期望通过使用这个json和现在的从其他服务返回响应response_body=null
我的问题是我需要创建存根还是模拟服务?利用此响应作为输入,从响应中产生预期的输出。基本上微服务期望一个ServiceResponse
。
另一个问题是,我们需要在进行合约测试时加载内存数据,还是只需要测试控制器本身?
我真的不明白你的描述…“我正在构建的服务有一个控制器,它可以转换我从groovy发送的输入负载,并以json格式提供所需的输出”。从哪个groovy发送?Groovy应用程序?你能更深入地解释一下吗?
但是我想我可以试着回答这个问题…
我的问题是我需要创建存根还是模拟服务?使用此响应作为输入以从响应中产生预期输出。它期待一个ServiceResponse。
如果我理解正确-service
你的意思是一个类而不是一个应用程序?如果是这种情况,那么,是的,我会在控制器中注入一个存根服务。
另一个问题是,我们需要在进行合约测试时加载内存数据,还是只需要测试控制器本身?
这与前面的答案有关。您的控制器不会将工作委托给服务的任何实际实现,因此不会访问DB。如果您查看示例(https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/producer/src/test/java/com/example/BeerRestBase.java),您会看到基类已注入模拟,并且没有进行真正的集成
编辑:
“我正在构建的服务具有控制器,它可以转换从groovy发送的输入有效负载并以json格式提供所需的输出”实际上是对通过Spring Cloud合约生成的测试所做工作的描述。下一句是
然而,控制器正在发送json到另一个服务,URL如下所示。
在合约测试中,我不关心您的控制器进一步做什么。如果您将请求发送到其他应用程序的控制器中,那么您应该将其包装在服务类中。然后您将在合约测试中模拟这样的服务。我们在合约测试中关心的是我们是否可以通信。而不是整个端到端功能是否正常工作。