0

在验证消费者方面的合同时,我正在尝试使用场景(又名状态)。这些场景是在 Spring Cloud 合约中通过使用 groovy 脚本的数字前缀来定义的,就像在文档中所说的那样:

my_contracts_dir\
    scenario1\
        1_login.groovy
        2_showCart.groovy
        3_logout.groovy

结果,在wiremock 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"
}

编写消费者集成测试时如何使用此状态的问题?假设我希望 stab 开关状态为“Step3”。如何在消费者集成测试中做到这一点?

附加信息:在消费者集成测试(即 Junit 测试)中,我使用 StubRunnerRule 而不是 @AutoConfigureStubRunner。所以我希望通过这个规则,我可以使用一些 api 来设置存根的状态。但我什么也没找到。

4

1 回答 1

0

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

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

于 2017-01-24T17:25:43.053 回答