既然是框架,自動少不了不同參數用例的驅動,也叫參數化或數據驅動
在Spock中,參數化使用的是關鍵字是where
我們還是通過實例來演示
實例一
我們還是繼續在原來的groovy測試文件中加入下面的測試用例,無意義的
def 'check data pipes' () { when: def intput2 = newinput then: def sum= intput2 + 1 println(sum) sum == 4 where: newinput << [2,3,5] }
這裏我們使用where關鍵字來參數化,通過<< 符號來傳入
我們再來看看執行結果,從結果中我們可以看到3個參數都執行了,但只有一個用例成功:
需要注意的幾個點如下:
- 我們通過groovy支持的操作字符中可以看到, <<的意思是傳入列表。這點和linux有點類似
- 不僅僅可以傳列表,還可以傳其它的集合,如:<< sql.rows("xxxx")
實例二
實例一介紹的是列表的傳入,下面介紹傳入表格的多參數的形式
def "maximum of to numbers"(){ when: def sum = Math.max(a, b) def result = c then: sum == result where: a|b|c 1|3|3 7|4|7 0|0|0 }
這能多參數我們是通過表格的形式來傳入,結果如下:
需要注意的有幾點:
- 既然是表格,所有就表頭和表內容,所以一行我們就叫表頭,寫的是數據變量名,通過|來分格,表內容按對應的順序寫入
- 表格形式驅動,至少要含有兩個單元格。有些人也會問,我就一個參數但還想用表格形式,該怎麼寫,可用下面方法:
a | _
1| _
實例三
這時候很多人會問,既然是BDD形式,我需要在用例名字上體現參數的變化,應該怎麼做呢?如下
做法如下,我們還是拿實例二的例子來改
def "maximum of #a & #b to numbers should #c"(){ when: def sum = Math.max(a, b) def result = c then: sum == result where: a|b|c 1|3|3 7|4|7 0|0|0 }
可以看出,通過#的符號來參數化內容,結果如下:
是不是比實例二更直觀了。
其實更高級的用例我們可以參數官方網站:https://spockframework.org/spock/docs/2.0/all_in_one.html#data-tables