问题描述
我想将整个示例作为Map对象传递给某个测试步骤。如何实现?
让我说出情景
Scenario Outline: some description text
When user do something
Then the user should see something
Examples: set 1
| Param Title |
| value 1 |
Examples: set 2
| Param Title | Param Title 2 |
| value 2 | value 3 |
在When user do something
的步骤定义中,我想要一个映射,第一个示例的映射为{"Param Title":"value 1"}
,第二个示例的映射为{"Param Title":"value 2","Param Title 2":"value 3"}
。有没有办法在黄瓜中做到这一点,或者我唯一的选择是为每个示例多次编写相同的场景?
解决方法
与通过将地图传递到通用step定义中而增加的复杂性相比,编写步骤定义的成本微不足道。
如果将所有步骤定义实现为对辅助方法的单次调用,则实际上,如果有很多步骤定义可以完成相同的操作,则实际上并不重要。当您遵循这种模式时,步骤定义将执行一个功能,它们会将字符串短语转换为方法调用。
让我给你一些例子
still has access in the App
现在您可能只想为所有这些编写一个步骤定义,但这实际上是一个错误和错误的优化。进行以下操作要容易得多(所有示例都在ruby中)
Given I am logged in
Given I am logged in as an admin
Given Fred is logged in
Given Bill is logged in
Given Sam is logged in as an admin
这里的所有工作都是由辅助方法(create_user,create_admin,login,admin_login)完成的,因此只要您都使用辅助方法来进行登录,那么是否有二十个步骤定义都可以登录在工作中您没有真正的代码重复,并且您具有简单性和一致性。
这与您目前正在采取的方法完全不同。但是,对于任何涉及使用步骤和步骤定义来完成复杂事情的库克问题,一个有效的答案就是不要再尝试去做复杂的事情,而应该去做更简单的事情。
,您可以在特征文件定义为列的特征文件中编写如下内容
When user do something <Param Title>
您可以在“步骤定义”中编写。这样,您就不必反复编写场景,并且可以将多个示例作为一个示例集中的多行编写
@When("user do something ([^\"]*)")
public void useractivity(String Title){
}