BDD场景是独家的吗?

时间:2012-10-07 20:29:58

标签: bdd scenarios

如果两个场景可以同时发生,那么(总是/永远)会构成第三种场景吗?

我目前的想法是,它们不一定是排他性的(取决于场景)。如果您有两个可能同时发生的场景,如果Given / When / Then步骤没有隐式合并,或者一个场景优先于另一个场景,它们只需要第三个场景。

在考虑基本上是一种注入形式的场景时出现了这个问题,其中对象的集合被注入另一个对象(https://github.com/jameskennard/mockito-collections)。因此,考虑到两种情况“测试中的对象类具有协作者列表”和“正在测试的对象类具有一组协作者”。两者都可以同时发生,因此第三种情况可能是“测试中的对象类具有List和一组协作者”。但它感觉不对,它太冗长了,我认为Given / When / Then步骤会被隐含地合并。 (有一种不好的感觉,我可能刚刚回答了我自己的问题)

任何人都有不同的想法吗?

2 个答案:

答案 0 :(得分:1)

目前,您的上述句子描述的是而不是行为

您在每种不同情境中获得的不同结果是什么?我希望这样的事情:

Given my CUT has five collaborators
When I do my thing with the class
Then it should use each collaborator in turn.

Given my CUT has five collaborators
And the fourth and fifth collaborators are identical
When I do my thing with the class
Then it should only use the fourth collaborator once.

这将说明列表(有序)和集合(无重复)的不同行为

如果这两个元素真正有益,那么是的,它们是两个独立的场景。如果他们都必须在课堂上有任何价值,我会将它们合并为一个:

Given my CUT has five collaborators
And the fourth and fifth collaborators are identical
When I do my thing with the class
Then it should use each collaborator in turn
And it should only use the fourth collaborator once.

两个同时受益的例子可能是从ATM取现,现金交付,账户也被扣除。你无法独立完成其中任何一项。提供交易收据将是一个单独的好处,因为它不需要需要来使ATM具有价值。希望这有助于区分。

答案 1 :(得分:1)

我认为这里的关键是行为。潜在的第三种情况(“被测对象类有一个列表和一组协作者”),你问的当然是真的,但其他两种情况已经涵盖了这种行为所以我想说没有必要写另一个场景。

如果给予的组合导致不同的行为,肯定会有第三种情况,但我相信你已经涵盖了你想要定义的行为。