Spring云契约集状态

Spring云契约集状态,spring,junit,spring-cloud,spring-cloud-contract,Spring,Junit,Spring Cloud,Spring Cloud Contract,我试图在验证消费者方的合同时使用场景(aka states)。这些场景是在spring云契约中通过使用groovy脚本的数字前缀定义的,如文档中所述: my_contracts_dir\ scenario1\ 1_login.groovy 2_showCart.groovy 3_logout.groovy 在wiremock json文件中,我看到添加了“newScenarioState”字段,如下所示: { “uuid”:“34a82

我试图在验证消费者方的合同时使用场景(aka states)。这些场景是在spring云契约中通过使用groovy脚本的数字前缀定义的,如文档中所述:

my_contracts_dir\
    scenario1\
        1_login.groovy
        2_showCart.groovy
        3_logout.groovy
在wiremock json文件中,我看到添加了“newScenarioState”字段,如下所示:

{
“uuid”:“34a829d1-adf4-41e4-b7d9-6ee66d7de8bc”,
“请求”:{
“url”:“/foo/demo”,
“方法”:“获取”
},
“答复”:{
“地位”:200,
“正文”:“[{\”模型\“:{\”地址\“:\”地址\“,\”名称\“:\”字符串\“}}]”,
“标题”:{
“内容类型”:“应用程序/json”
}
},
“场景名称”:“场景合同”,
“requiredScenarioState”:“步骤2”,
“newScenarioState”:“步骤3”

}
您可以通过发送正确的请求将服务器切换到一种状态。如果要将状态从step1切换到step2,则必须发送适当的请求,以触发step1到step2的转换。在您展示的示例中,您必须发送从步骤1到步骤2再从步骤2到步骤3的转换请求。在后一种情况下,它将是WireMock存根中描述的GET消息。记住,然后你将进入与州有关的问题。您的存根将在您的测试之间共享-请记住在您的测试上传递@DirtiesContext注释,以确保生成新的上下文,并且您将能够以您想要的方式设置存根


最后一句话-尽量不要使用有状态测试,只需将问题分割为单独的步骤,您可以独立进行测试。这样你可以快速并行地测试这些东西。对于合同测试,您不一定需要存根端的任何状态。

谢谢,Marcin。是的,当我在互联网上观看你们的几次演讲时,我明白了你们关于状态测试的观点。但如果我需要测试当生产者对同一请求返回不同响应时,我的消费者服务如何反应。假设消费者服务是一个购物车。我想在购物车为空以及购物车中有一些商品时运行消费者测试。你能为这个案子推荐什么?非常感谢您的支持,没问题!我将分离这些步骤,并分别测试请求-响应通信。请记住,接触测试不应该复制您的功能。你只想测试你是否真的能正确沟通。因此,在将业务逻辑与基础架构逻辑分离之后,我将通过删除任何http通信来测试前者,并通过分别检查3个不同的步骤来测试前者。这有什么意义吗?:)您还可以按正文或标题区分请求。你可以发明,如果一个人的名字是“欺诈”,那么我们可以假设我们将把这个人切换到“欺诈”状态。这就是你控制过程的方法