BDD 特性应该有多精细?

How granular a BDD feature should be?

说点简单的吧。我们有一个 TODO 列表,我们想将任务添加到列表中。这里的功能是什么,场景是什么?

a.) 我们可能在谈论一个 class 或一组服务 功能:待办事项列表 场景 1:将新任务添加到待办事项列表 场景 2:尝试添加新任务,但由于缺少任务描述而失败

b.) 我们可能在谈论一种方法或单个服务 功能:将任务添加到待办事项列表 场景 1:添加新任务 场景 2:由于缺少描述而失败

我将它们都称为 BDD,尽管 BDD 也试图了解该功能背后的目的。反正"adding a task"就是特征,做的成功和不成功都是两种情况。我可能还会谈谈成功添加任务意味着什么(它显示在列表中,是否有类别或是否是单个列表,它是在列表顶部还是底部?是否有时间什么时候必须完成的约束?)我会谈谈添加任务失败意味着什么(它不在列表中,可能界面告诉你需要添加标题)。再一次,你为什么要添加一个没有标题的任务?这是一个常见的用例吗?标题只是反映 body 吗?也许您希望使用列表的方式不需要标题? BDD 是关于行为,而不是实现,所以无论哪种方式都可以。

我认为 BDD 的整个概念与 类、方法或变量的数量无关。这完全是关于与利益相关者的对话

您所说的功能可能是首先触发对话的东西。例如,我们有一个 TODO 列表,但如果它是空的,对任何人都没有用。因此,功能 可以将任务添加到 TODO 列表

对话从这里开始,很可能您会针对您的场景想出 "happy path":

Given that the TODO list is empty
When I add a new task "Buy Milk" to the list
Then the TODO list should have 1 task
And its description should be "Buy Milk"

然后您可能会开始向您的利益相关者提出更多问题:

  • 我需要登录才能将任务添加到 TODO 列表吗?
  • 我需要任何权限才能将任务添加到 TODO 列表吗?
  • TODO 列表可以容纳的任务是否有最大数量限制?
  • 我可以在 TODO 列表中添加与现有任务描述相同的任务吗?

所有这些问题都将创建您的场景,您需要在利益相关者的帮助下在 Gherkin 中对其进行描述,然后对其进行编码以使其通过。