考虑具有多个“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()
将有效负载存储为实例变量,然后根据变量进行验证。然而,利用柑橘的力量会好得多。
答案 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@
语句中,您应该使用基于模板的比较验证。