使用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占位符?
有更好的方法来编写这个规范和夹具吗?例如,是否最好在夹具中创建一个方法来检索列表中的每个单独的映射,而不是完整的列表?
发布于 2015-12-12 17:11:08
正如您注意到的,没有#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 }
}
}https://stackoverflow.com/questions/34236040
复制相似问题