我在验证消费者方面的合同时尝试使用方案(也就是状态)。这些场景是在spring cloud合约中定义的,它使用groovy脚本的数字前缀,就像在文档中所说的那样:
my_contracts_dir\
scenario1\
1_login.groovy
2_showCart.groovy
3_logout.groovy
作为线索json文件的结果,我看到" newScenarioState"字段被添加,如下所示:
{
"uuid" : "34a829d1-adf4-41e4-b7d9-6ee66d7de8bc",
"request" : {
"url" : "/foo/demo",
"method" : "GET"
},
"response" : {
"status" : 200,
"body" : "[{\"model\":{\"address\":\"Address\",\"name\":\"String\"}}]",
"headers" : {
"Content-Type" : "application/json"
}
},
"scenarioName" : "Scenario_contracts",
"requiredScenarioState" : "Step2",
"newScenarioState" : "Step3"
}

在编写消费者集成测试时如何使用这种状态的问题?让我们说我希望刺穿开关状态" Step3"。我怎样才能在消费者集成测试中做到这一点?
附加信息:在消费者集成测试中(这是Junit测试)我使用StubRunnerRule而不是@AutoConfigureStubRunner。所以我希望通过这个规则,我可以使用一些api为存根设置状态。但我没有找到任何东西。
答案 0 :(得分:0)
您可以通过发送正确的请求将服务器切换到某个状态。如果要将状态从步骤1切换到步骤2,则必须发送一个触发step1到step2转换的正确请求。在您显示的示例中,您必须发送将执行从步骤1转换到步骤2然后从步骤2转换到步骤3的请求。在后一种情况下,它将是WireMock存根中描述的GET消息。请记住,那么你就会进入与州有关的问题。您的存根将在您的测试之间共享 - 请记住在测试中传递@DirtiesContext注释,以确保生成新的上下文,并且您将能够以您希望的方式设置存根。
最后评论 - 尽量不要使用有状态测试,只需将问题拆分为可以独立测试的单独步骤。这样你就可以快速并行地测试这些东西。对于合同测试,您不一定需要在存根端的任何状态。