我们已经意识到在定义典型的 CRUD 场景时有两个选项可以指定测试数据:
选项 1:描述要使用的数据,并让实现定义数据
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have typed in a valid name
And I have typed in a valid code
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the created region details
选项 2:明确说明要使用的测试数据
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have filled out the form as follows
| Label | Value |
| Name | Europe |
| Code | EUR |
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the following fields
| Name | Code |
| Europe | EUR |
在利弊方面,我们已经确定的是:
选项 1 很好地涵盖了“有效名称”的定义发生变化的情况。如果我们使用测试数据位于多个位置的选项 2,这可能会更难处理。选项 1 明确描述了此测试数据的重要性,尤其是在我们所说的“输入了无效的信用卡号”之类的情况下。它还以某种方式“感觉”更抽象和 BDD,更关注描述而不是实现。
但是,选项 1 使用了很难重复使用的非常具体的步骤。例如,“页面应该显示创建的区域详细信息”可能只会在这种情况下使用。相反,我们可以实现选项 2 的“页面应该显示以下字段”,以使其可以被其他场景多次重复使用。
我还认为选项 2 似乎对客户更友好,因为他们可以通过示例看到正在发生的事情,而不必解释更抽象的术语,例如“有效”。选项 2 会更脆弱吗?重构模型可能意味着破坏这些测试,而如果测试数据是在代码中定义的,编译器将帮助我们进行模型更改。
我很欣赏这里不会有正确或错误的答案,但想听听人们对他们如何决定使用哪个的意见。
谢谢!