为什么在Where块

时间:2017-11-17 17:46:27

标签: spock geb

我有一个Page类,并有一些提取网页的方法。现在我想将这些方法称为Spock的Where块作为数据提供者传递。但是当我调用该方法时,它会抛出错误,因为它没有找到它。但是可以从Where块中访问它。为什么会这样?

实施例

def "Validate all article has its id"(){
    when:"I am at Overview page"
    at OverviewPage

    then:"I should the article id of all article"
    getAllCountOf(articleInfo).size() ==  actualCount

    where:
    articleInfo                          |actualCount
    TopArticleListInfo.ARTICLE_THUMBNAIL |filter.getCount()

}

在上面的代码中,'filter.getCount()'无法从Where块访问,但是在when或then block中可以访问相同的方法。

我想了解场景背后的逻辑看起来,Where block无法静态找到这个方法,需要创建一个对象来调用它。

当我尝试erdi提供的解决方案时,但这也没有解决问题

when:"I am at Overview page"
    at OverviewPage
    then:"I should the article id of all article"
    getAllCountOf(articleInfo).size() ==  page."$actualCount"

    where:
    articleInfo                          |actualCount
    TopArticleListInfo.ARTICLE_THUMBNAIL |'getRowCount().size()'

这里getRowCount()。size()替换为“$ actualCount”。但它仍然抛出错误

错误消息

getAllCountOf(articleInfo).size()== page。“$ actualCount”     | | | | |     | | 10 | groovy.lang.MissingPropertyException:无法将getRowCount()。size()解析为inca.sundashboard.pageobject.OverviewPage的内容,或者作为其Navigator上下文中的属性。 getRowCount()。size()是你忘记导入的一个类吗?     |

1 个答案:

答案 0 :(得分:2)

我在测试中使用Dynamic Method Names,这是一个小例子:

def "Validate all article has its id"(){
    when: "I am at Overview page"
    at OverviewPage

    then: "I should the article id of all article"
    getAllCountOf(articleInfo).size() ==  "$actualCountMethod"().getCount()

    where:
    articleInfo                          | actualCountMethod
    TopArticleListInfo.ARTICLE_THUMBNAIL | filter

}