小黄瓜——真实的还是有代表性的场景



假设我的应用程序可以处理一些真正标题的书"《老人与海》"战争与和平";,等等,在创建场景时,我应该使用真正的标题吗?比如:

Given I have a book "War and Peace" persisted
When ...

或者我应该做一些类似的事情:

Given I have a book "Book1" persisted
When ...

选项2是一个更通用但人为的例子。如果我使用第一个选项,阅读测试的人必须具备领域知识,而且他一读书名就会对场景有一些假设。

此外,有没有什么更简单的方法可以让我在不重复数据的情况下创建数据表(在这种情况下,我总是要重复1,1,2,2,2…的页面(?示例:

When we receive book with following content:
| Page  | Line  | Text  |
| 1     | 1     | a     |
| 1     | 2     | b     |
| 2     | 1     | a     |
| 2     | 2     | b     |

这是标准的方法吗:

When we receive a book
And page 1 has content
| Line  | Text  |
| 1     | a     |
| 2     | b     |
And page 2 has content
| Line  | Text  |
| 1     | a     |
| 2     | b     |

首先从场景的名称开始,这个名称应该是有意义的,并且应该像是关于测试内容的摘要。

一旦你有了名字,那么其他步骤应该描述业务流程,当然应该包含领域语言,因为例如,如果我对医疗保健、银行等一无所知,那么我为什么要理解关于特定领域主题的测试?,这些场景针对特定的一群人(在特定领域工作的人(。

BDD的作用之一是帮助更好地理解所有级别(从技术到非技术,但在同一业务领域(的规范和应用程序,以改进通信。

现在谈谈你的具体问题
Given I have a book "War and Peace" persisted没有提供太多信息,因为书名中没有提到测试数据;是刚刚添加/创建的新书吗?,一种类型的书是技术性的/诗歌的还是仅仅是一本书?

对我有用的是为数据使用一个名称,说明测试中使用的数据
如果你没有不同类型的书,你可以用任何名字,否则一个更完整的名字会更有用。

至于表,它表示一个数据集,您需要告诉要检查什么以及在哪里检查;根据具体情况,您可以对一些检查进行分组,是否可以一次读取所有数据,或者是否需要指定文本/页面。

一种选择是隐藏数据集,并说一些类似的话:

Given我有一本书《战争与和平》然后这本书包含了"战争与和平">
  • 第一步的预期内容"战争与和平"-获取/创建由该标题标识的特定书籍
  • 在第二步骤中;"战争与和平"-使用相同的名称标识预期结果的一组数据,因为这是该特定数据集的预期数据,所以这组数据可以是列表/数组/映射。。。这取决于您使用的编程语言

不要考虑太多细节,只需使用由外而外的方法用人类可读的语言定义场景,然后看看是否可以在开始实现后对其进行改进。

始终使用功能描述和每个场景的有意义的标题

最新更新