使用Fancordion v1.0.4中的表,如何在列命令中使用行索引来验证其值。
例如,如果我的夹具是:
class MyFixture : FixtureTest {
[Str:Obj?][] getCountries() {
return [["code":"AU", "name":"Australia"], ["code":"NZ", "name":"New Zealand"], ["code":"UK", "name":"United Kingdom"]]
}
}
规范是:
table:
col[0]+verifyEq:getCountries[#ROW]["code"]
col[1]+verifyEq:getCountries[#ROW]["name"]
Country Code Country Name
------------ ------------
AU Australia
NZ New Zealand
UK United Kingdom
我应该使用什么代替上面规范示例中的#ROW
占位符?
有没有更好的方法来编写此规范和夹具?例如最好在灯具中创建一个方法来检索列表中的每个单独的地图而不是完整列表?
答案 0 :(得分:1)
正如您所指出的那样,没有#ROW
宏(但它可能是一个很好的补充!)所以目前您需要更改断言或数据结构。
这里我们稍微更改断言并引入我们自己的row
字段,该字段在每行迭代结束时递增:
** Hi!
**
** table:
** col[0]+verifyEq:getCountries[#FIXTURE.row]["code"]
** col[1]+verifyEq:getCountries[#FIXTURE.row]["name"]
** row+exe:row++
**
** Country Code Country Name
** ------------ ------------
** AU Australia
** NZ New Zealand
** UK United Kingdom
**
class CountryTest : FixtureTest {
Int row := 0
[Str:Obj?][] getCountries() {
return [["code":"AU", "name":"Australia"], ["code":"NZ", "name":"New Zealand"], ["code":"UK", "name":"United Kingdom"]]
}
}
更好的方法可能是将要测试的数据更改为列表列表。因此,当测试数据太多或太少时,它具有失败的附加优势。
** Hi!
**
** table:
** verifyRows:getCountries()
**
** Country Code Country Name
** ------------ ------------
** AU Australia
** NZ New Zealand
** UK United Kingdom
**
class CountryTest : FixtureTest {
Str[][] getCountries() {
countries := [["code":"AU", "name":"Australia"], ["code":"NZ", "name":"New Zealand"], ["code":"UKs", "name":"United Kingdom"]]
return countries.map { it.vals }
}
}