Unit testing 在Spock测试中的where:块中传递值
是否可以像这样在where块中传递一个值 我试过这个。但它失败了,并给出了MissingPropertyException 我希望name1和name2在方法中Unit testing 在Spock测试中的where:块中传递值,unit-testing,groovy,spock,Unit Testing,Groovy,Spock,是否可以像这样在where块中传递一个值 我试过这个。但它失败了,并给出了MissingPropertyException 我希望name1和name2在方法中 def "length of names #name"() { def name1 = "Spock" def name2 = "Java" expect: name.size() == length where:
def "length of names #name"() {
def name1 = "Spock"
def name2 = "Java"
expect:
name.size() == length
where:
name || length
name1 || 5
name2 || 2
}
测试数据属于where块,而不是在测试(特征)方法中硬编码 一个粗略的方法是将测试体(不包括where块)看作一个具有一些参数的方法——在您的例子中为2,名称和长度。然后认识到where子句只向测试运行程序提供数据值,以便在调用测试方法时使用 Spock使用Groovy magic进行转换
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)
这种方法
- 在测试逻辑和测试数据之间提供了良好的关注点分离
- 允许对广泛的输入和边缘情况重复使用相对通用的测试
- 避免测试代码中的重复
- 支持一种值得称为数据驱动测试的测试设计风格
def "test length of names"() {
expect:
name.size() == length
where:
[name,length]<<getTestData()
}
def getTestData(){
[["Ram" ,3 ] ,["Test" ,4] ]
}
def“名称的测试长度”(){
期望:
name.size()=长度
哪里:
[name,length]是的,“where”数据在功能测试之外,但是Spock的词汇布局功能在功能内部出现。顺便说一句,“Spock documentation”链接已断开。关于“where子句”,我希望有一种重用数据的机制那Where
是一个接口,它允许private Where getTestData(){…}
从Anuj的示例返回Where表。当然,我更喜欢整洁的表语法。谢谢你非常清晰的解释。文档链接是固定的。谢谢你指出这一点。