你的场景中有很多 UI 细节。这使得很难理解您真正在验证哪种行为。
场景名称提供了一些提示,但 Given/When/Then 中的具体示例包含许多混淆目的的细节。
Scenario: Login with invalid username/password
Given I am signed out
When I log in with invalid user credentials
Then should I get an error message
Scenario: Login with valid username/password and valid PIN
Given I am signed out
When I log in with valid credentials
then should I be greeted
这两个示例不包含有关链接或 pin 表单的任何详细信息。我将这些视为我将在堆栈中下推的实现细节。我会将它们推送到步骤正在使用的辅助类。您似乎正在验证 Web 应用程序,我会让这些详细信息存在于支持这些步骤的页面对象中。
我还会考虑删除人称代词的使用,并将I
其改为角色。系统用户的典型角色。角色有一个名字。假设我们创建了一个名为“Ann”的角色,她是一名在行政部门工作的 35 岁女性。这将使我有机会将场景重写为
Scenario: Login with invalid username/password
Given Ann am signed out
When Ann log in with invalid user credentials
Then will she receive an error message
Scenario: Login with valid username/password and valid PIN
Given Ann am signed out
When Ann log in with valid credentials
then should Ann be greeted
这给了我们一些背景信息,我们知道安是谁。我们可以将她的用户名和密码保存在我们的支持类中,并期望实现能够正确使用它们。