我们已经认识到,在定义典型的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是否更脆弱呢?重构模型可能意味着破坏这些测试,而如果测试数据在代码中定义,则编译器将帮助我们进行模型更改。
我知道这里没有对错答案,但我想听听人们如何决定使用哪个选项的意见。
谢谢!