0

@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.

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

4

1 回答 1

1

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

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

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

如果我理解正确 -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 生成的测试完成的操作的描述。下一句是

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

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

于 2017-09-16T13:34:09.257 回答