如何处理许多“然后”步骤定义?

时间:2018-06-07 22:43:01

标签: java cucumber gherkin citrus-framework

考虑具有多个“Then”步骤定义的场景,这些定义旨在用作针对响应有效负载的断言:

  ...
  When a response is received
  Then the response should have an element "foo" with the content "bar"
  And the response should contain 1 "foobar" element
  And the response should have an element "rab" with the content "oof"
  ...

Citrus处理未知数量验证的目的是什么?在调用receive()之前,您能定义几个验证器吗?这可以用validationCallback()和最小的Gherkin重写来处理吗?

当前实现使用validationCallback()将有效负载存储为实例变量,然后根据变量进行验证。然而,利用柑橘的力量会好得多。

1 个答案:

答案 0 :(得分:0)

您可以在Given部分或甚至情景背景中使用命名消息:

Given message fooResponse
    And <fooResponse> payload is "Hi my name is Foo!"
    And <fooResponse> header operation is "sayHello"
    ...

您可以在以下场景中使用命名消息:

Scenario: Send and receive
  When <client> sends message <fooRequest>
  Then <client> should receive message <fooResponse>

所有元素的验证都是自动完成的,因为Citrus验证器会比较收到的和预期的邮件内容。

您还可以将消息创建提取到Java POJO消息创建者:

Background:
  Given message creator com.consol.citrus.FooMessageCreator

public class FooMessageCreator {
    @MessageCreator("fooResponse")
    public Message createEchoResponse() {
        return new DefaultMessage("Hi my name is Foo!")
                    .setHeader("operation", "sayHello");
    }
}

如果您需要处理大型XML / Json有效负载,您还可以从外部文件模板资源加载有效负载。您应该使用Then部分来忽略与验证无关的消息部分,而不是将每个元素设置在单独的显式@ignore@语句中,您应该使用基于模板的比较验证。