2017-01-24 81 views
0

我试图在验证消费者一方的合同时使用场景(又称状态)。这些方案通过使用号码前缀为常规脚本春云合同规定像它在文档中说:春季云合同设置状态

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" 
 
}

这个问题我该如何使用书写消费者集成测试时,这个国家?比方说,我希望插入开关显示“Step3”。我如何在消费者集成测试中做到这一点?

附加信息:在消费者集成测试(这是Junit测试)中,我使用StubRunnerRule而不是@AutoConfigureStubRunner。所以我希望通过这个规则我可以​​使用一些API来为存根设置状态。但我没有找到任何东西。

回答

0

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

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

+0

谢谢,马辛。是的,当我在互联网上观看您的几次谈话时,我已经了解了关于有状态测试的观点。 但是,如果我需要测试生产者在同一请求上返回不同响应时消费者服务如何反应。可以说消费者服务是一个购物车。我想在购物车是空的时候以及其中有一些物品时运行消费者测试。你能为这种情况推荐什么? 非常感谢您的支持。 – Dmitry

+0

没问题!我会分开这些步骤并分别测试请求响应通信。请记住,联系测试不应该重复您的功能。你只想测试你是否可以正确地进行沟通。因此,在将业务逻辑从基础架构逻辑中分离出来之后,我会通过分别检查3个不同的步骤来对前者进行测试,从而对任何http通信和前者进行测试。它有任何意义吗? :) –

+0

您也可以通过正文或标题区分请求。你可以发明如果某人的名字是“欺诈”,那么我们可以假设我们将把这个人改为“欺诈”状态。这就是你可以控制这个过程的方法 –