是否可以在这样的块中传递值。
我试过这个。但它失败了,并给出了MissingPropertyException。
我希望name1和name2在方法内部。
def "length of names #name"() {
def name1 = "Spock"
def name2 = "Java"
expect:
name.size() == length
where:
name || length
name1 || 5
name2 || 2
}
答案 0 :(得分:7)
测试数据属于where块,而不是测试(特征)方法中的硬编码。
一种看待这种情况的粗略方法是将测试体(不包括where块)视为具有一定数量参数的方法 - 在您的情况下为2,名称和长度。然后意识到where子句只是为测试运行器提供数据值,以便在调用测试方法时使用。
Spock使用Groovy魔法转换
def "test length of names"() {
expect:
name.size() == length
where:
name | length
"Spock" | 5
"Java" | 4
}
大致像
def test_length_of_names(name, length) { // note the arguments
assert name.size() == length
}
然后告诉测试运行器为where子句
中的每一行调用一次测试test_length_of_names("Spock", 5)
test_length_of_names("Java", 4)
这种方法
此解释省略了一些细节,例如为每个测试创建规范实例,更新每个测试调用的名称以及调用各种设置和清理方法。
有关详细信息,请参阅the Spock documentation。
答案 1 :(得分:5)
试试这个:
def "test length of names"() {
expect:
name.size() == length
where:
[name,length]<<getTestData()
}
def getTestData(){
[["Ram" ,3 ] ,["Test" ,4] ]
}
希望有所帮助!!!
由于