考虑到测试向第三方API发送消息的方案,我可以为单个方案添加多个分配和结果,用于消息的每个属性。这使得场景非常复杂。
我也可以将它们分解为不同的场景。但他们真的没有不同的场景。
这是一个包含多个数量和结果的情景:
Scenario 1: An order
Given an order
And that has order ID equal to 42
And that has affiliate reference equal to foo
When the conversion for the order is sent
Then the conversion has an ID equal to 42
And the conversion has an affiliate ID equal to foo
在这里,我将其分解为多种情况:
Scenario 1: An order with a specific order ID
Given an order that has order ID equal to 42
When the conversion for the order is sent
Then the conversion has an ID equal to 42
Scenario 2: An order with a specific affiliate reference
Given an order that has affiliate reference equal to foo
When the conversion for the order is sent
Then the conversion has an affiliate ID equal to foo
答案 0 :(得分:1)
尝试与业务中的某人就该订单进行对话。向他们询问具有联盟参考的订单类型的示例。
如果他们自然地谈论具有特定ID和联盟参考的订单,并且这两件事情汇集在一起,那么将它放在一个场景中就没问题了。您可能会听到他们在同一条款中谈论这两件事,例如:
总线:所以,当我们发送转换订单时,它应该具有相同的ID和 会员参考。
MvO:你能举个例子吗? ID和会员 参考
总线:当然,ID是一个简单的整数,所以,42,和会员 reference是我们会员的名字,所以类似于' Foo'。
(顺便说一下,如果可以的话,使用现实的联盟会员名称 - 如果您错过了某些内容,它会让企业更容易发现!)
当我们将其转换为Gherkin时,尽可能保持语言自然(I wrote a blog post on this),我们得到类似的内容:
Given an order with ID 42 and affiliate reference "foo"
When we send the order for conversion
Then the conversion should have the same ID and affiliate reference.
但是,如果有些订单没有联盟参考,或者保留联盟参考是一个完全独立的功能,而且业务单独谈论它,可能你需要两个场景。
请注意,与您的业务代表交谈还有其他一些好处!
首先,他们可能会在"当"在主动语音(我们发送订单)而不是被动(发送订单),这使得更容易看到谁在做什么。这在具有多个角色的场景中尤为重要,并有助于我们思考触发结果的人或因素。 (Here's a blog post about tenses and voices in BDD.)
其次,你有机会质疑他们! "是否有任何订单没有联盟参考?是否所有订单都有这样的ID,或者您是否有一些旧订单在系统中浮动旧版ID?"等等。如果您无法轻易提出问题,请携带测试人员。测试人员非常善于思考要问的问题。 (I wrote a blog post on this, too.)
第三,您更有可能将业务使用的相同语言带入代码中,因此它可以更容易维护,并且您可以进行有关它的对话更容易。
如果您的企业实际上并未对围绕API执行的对话感兴趣,那么不会使用基于Gherkin的工具进行API测试。您可以比英语更容易维护a little DSL in plain old XUnit。
更一般地涵盖您的问题:是的,在一个场景中有多个赠品和结果可以。我通常认为,一旦你有超过七个步骤,你就想把它分成不同的场景。
确保你有关于场景的对话,因为当你这么做时,很多这些问题都会消失。