问题标签 [spring-cloud-contract]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring Cloud Contract 中生成的测试失败
我是 spring-cloud-contract 的新手。只是试图配置我的构建,我得到了错误。
这是我的项目结构
项目
| ==> 模块
我的项目 build.gradle 中有以下类路径依赖项
项目构建文件
模块构建文件
我有一个 groovy 文件,其中包含一个发布请求和一个响应。当我这样做gradle build
时,测试是自动生成的,但我的构建是感觉的。
难道我做错了什么?我使用的版本是否有任何不匹配?
java - Spring Cloud 合约无法发送 post 请求
我正在尝试通过发送发布请求RestAssuredMockMvc.standaloneSetup()
,但收到以下请求错误。我在 Groovy 文件中有我的合同,其中包含请求和响应代码。我在以下异常下收到 400 响应。
在上述异常结束时..这是以下junit断言
在请求中发送的实际有效负载是一个接口,我知道这可能是创建请求有效负载的问题。除此之外,我不知道如何处理这个错误。任何线索将不胜感激。
spring - Spring Cloud Contract 生产者无法发送消息
我正在尝试将 Spring Cloud Contract 合并到现有项目中。我在 REST 方面取得了一些成功,但我在努力设置消息传递方面。
到目前为止,我已经在生产者身上建立了一个合同,它确实在目标/生成的测试源/合同中产生了一个测试。我还为测试设置了一个基类。
我无法克服这个错误:
2017-09-08 17:10:51.759 错误 - --[]- [main] osccvmstream.StreamStubMessages:尝试解析目标时发生异常。将采用名称[邀请]
org.springframework.beans.factory.NoSuchBeanDefinitionException:在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353) 上没有“org.springframework.cloud.stream.config.ChannelBindingServiceProperties”类型的合格 bean在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340) 在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093) 在 org.springframework.cloud.contract.verifier .messaging.stream.StreamStubMessages.resolvedDestination(StreamStubMessages.java:86) 在 org.springframework.cloud.contract.verifier.messaging.stream.StreamStubMessages.receive(StreamStubMessages.java:73) 在 org.springframework.cloud.contract.verifier.messaging.stream.StreamStubMessages.receive(StreamStubMessages.java:110) at org.springframework.cloud.contract.verifier.messaging.stream.StreamStubMessages.receive(StreamStubMessages.java:36) at org. springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging.receive(ContractVerifierMessaging.java:40) at org.springframework.cloud.contract.verifier.tests.email.MessagingTest.validate_invitedContract(MessagingTest.java:27)在 org.springframework.cloud.contract.verifier.tests.email.MessagingTest.validate_invitedContract(MessagingTest.java:27) 处接收(ContractVerifierMessaging.java:40)在 org.springframework.cloud.contract.verifier.tests.email.MessagingTest.validate_invitedContract(MessagingTest.java:27) 处接收(ContractVerifierMessaging.java:40)
然后
2017-09-08 17:10:51.759 错误 - --[]- [main] osccvmstream.StreamStubMessages:尝试从名为 [invites] 的频道读取消息时发生异常
org.springframework.beans.factory.NoSuchBeanDefinitionException:在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687) 在 org.springframework.beans.factory.support.AbstractBeanFactory 中没有名为“邀请”的 bean .getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202 )
我在 src/test/resources 下的 application.yml 文件:
spring:
cloud:
stream:
bindings:
output:
content-type: application/json
destination: invites
我有以下依赖项:
我梳理了文档,观看了 Marcin 的演讲并查看了 Spring Cloud Contract 的示例,但我被卡住了。任何帮助将不胜感激。
java - 初始化错误无法在 Gradle 构建中调用合约测试
我的合同和测试在我的构建文件夹中成功生成。生成的测试扩展了我在 gradle 构建文件中配置的基类映射。当我运行我的时,gradle build
我总是得到以下错误。
请注意,我可以在 Intellij 中运行单个测试并且测试通过。
这是测试结果中的完整堆栈跟踪
我已经配置了我的gradle,如下所示
spring-cloud-contract - 使用 Spring Cloud Contract 时如何获得动态响应?
我知道Groovy DSL
能够生成一个随机值,就像上面的代码一样。但是Groovy DSL
只是生成一个静态存根,它总是会返回与我请求相同的响应。
在这种情况下,如何在不重新生成存根的情况下获得随机天气?
spring - 使用 ActiveMQ 的 Spring Cloud Contract MessageVerifier 中的 ClassCastException
我整个星期都在玩 Spring Cloud Contract。我能够使用 Spring Cloud Stream 创建一个生产者和消费者应用程序来进行消息传递。
我正在尝试重新设计生产者端以使用 ActiveMQ(带有虚拟主题)。我想我快到了。我已经编写了自己的 MessageVerifier 并将其注入到测试的基类中。现在我得到:
测试运行:1,失败:0,错误:1,跳过:0,经过的时间:2.535 秒 <<< 失败!- 在 org.springframework.cloud.contract.verifier.tests.someconsumer.MessagingTest validate_inviteContract(org.springframework.cloud.contract.verifier.tests.someconsumer.MessagingTest) 经过时间:0.802 秒 <<< 错误!java.lang.ClassCastException: org.apache.activemq.command.ActiveMQTextMessage 不能在 org.springframework.cloud.contract.verifier.messaging.stream.ContractVerifierHelper.convert(ContractVerifierStreamAutoConfiguration.java:59 ) 在 org.springframework.cloud.contract.verifier.tests.someconsumer.MessagingTest 的 org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging.receive(ContractVerifierMessaging.java:40)。
我可以从日志文件中得知正在发送测试消息,并且我的自定义 MessageVerifier 正在接收消息。我错过了哪些步骤?
如果我像这样定义我的 MessageVerifier:
公共类 ConsumerMessageVerifier 实现 MessageVerifier<ActiveMQTextMessage>
然后解决了 ClassCastException,但导致其他问题“应用程序无法启动”错误:
说明:org.springframework.cloud.contract.verifier.messaging.integration.ContractVerifierIntegrationConfiguration 中方法 contractVerifierMessaging 的参数 0 需要找不到类型为“org.springframework.cloud.contract.verifier.messaging.MessageVerifier”的 bean。- Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnClass 未找到所需的类 'org.springframework.amqp.rabbit.core.RabbitTemplate' - Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnClass 未找到所需的类 'org.apache。 camel.Message' - 'ContractVerifierIntegrationConfiguration' 中的 Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnMissingBean(类型:org.springframework. cloud.contract.verifier.messaging.MessageVerifier;SearchStrategy: all) found bean 'consumerMessageVerifier' - 'NoOpContractVerifierAutoConfiguration' 中的 Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnMissingBean(类型:org.springframework.cloud.contract.verifier.messaging.MessageVerifier;SearchStrategy: all)找到了 bean 'consumerMessageVerifier' - 未加载 Bean 方法“contractVerifierMessageExchange”,因为 @ConditionalOnProperty (stubrunner.stream.enabled=true) 在属性“stubrunner.stream.enabled”中发现了不同的值
所以,我不确定这是否是正确的道路。所以我的问题是:
我应该像上面那样限定 MessageVerifier 吗?
如果是这样,解决“应用程序无法启动”错误需要哪些步骤?
谢谢!
java - 我们是否需要存根 Spring Cloud 合约中的其他微服务
@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
.
另一个问题是我们是否需要在进行合约测试时加载内存中的数据,还是只需要测试控制器本身?
spring-cloud-contract - Spring Cloud 合同:在测试阶段无法在空对象上获取属性“serverValue”
我正在尝试启动测试阶段以生成存根。这是我的控制器类:
这是我的基类:
这是我的合同:
但是一旦我尝试执行测试阶段,我就会收到以下错误:
microservices - 带有路径变量的服务端点导致带有云合同的 404
我写了一份合同,插件自动生成了测试。我看到这些自动生成的测试有一个非常奇怪的行为。
以下是我的服务端点:
这是合同:
当我运行“mvn clean install”时,测试会自动生成并运行。这适用于上述合同并且测试完美通过。
但是,如果我将路径中的数据更改为“/check/12345678”,它就会开始失败。
我无法理解的是我的端点正在采用字符串类型的 id path 变量。对于这种类型的路径,任何值都应该是好的。但是,以下路径有效:
以下不起作用:
如果我能得到关于这种行为的解释,或者如何解决它,那就太好了。几乎任何字符串都可以工作。例如"/check/234df-dfs-fs234fds-sdf-fssd3rr"
jsonpath - 过滤器:[?] 不能应用于处理 Spring Cloud Contract DSL 的原语
我有一个如下所示的 Spring Cloud Contract DSL:
没有“有效负载”部分,一切都很好。使用有效负载,我遇到了这个异常:
com.jayway.jsonpath.InvalidPathException: Filter: [?] can not be applied to primitives. Current context is: {"email":"test@example.com","legalName":"ACME Inc"}
at com.jayway.jsonpath.internal.path.PredicatePathToken.evaluate(PredicatePathToken.java:66) ~[json-path-2.2.0.jar:2.2.0]
at com.jayway.jsonpath.internal.path.PathToken.handleObjectProperty(PathToken.java:81) ~[json-path-2.2.0.jar:2.2.0]
at com.jayway.jsonpath.internal.path.PropertyPathToken.evaluate(PropertyPathToken.java:79) ~[json-path-2.2.0.jar:2.2.0]
at com.jayway.jsonpath.internal.path.RootPathToken.evaluate(RootPathToken.java:62) ~[json-path-2.2.0.jar:2.2.0]
生成的测试中的相关行:
再多一点信息,这就是序列化消息的样子:
2017-09-21 08:32:03.721 INFO 10716 --- [ main] c.v.sccdemo.producer.InviteServiceImpl : Event: {"id":"e63de44e-6e1a-4c4e-b98b-3c49a49efc9c","destination":"VirtualTopic.some_destination","correlationId":"8efb9740-5651-4068-8a6e-574ae7759552","service":"MY_SERVICE","payload":"{\"email\":\"test@example.com\",\"legalName\":\"ACME Inc\"}","timestamp":1505997123576,"version":"v1"}
我在 DSL 中做错了吗?身体的“有效载荷”部分是否正确表达?