在進(jìn)行測(cè)試程序開發(fā)時(shí)慨亲,經(jīng)常會(huì)有執(zhí)行或驗(yàn)證的程序是在不同的測(cè)試用例間一直重覆车酣,當(dāng)然使用 Spock 時(shí)也不例外。根據(jù) Spock 的官方文件提到渠羞,在 Spock 中可以使用 Helper Methods 來把要被共用的源代碼收納于其中扳抽,并且在不同的測(cè)試方法間調(diào)用篡帕。
以下為測(cè)試方法共用源代碼的范例:
def tester
def "測(cè)試用例一"() {
when:
prepareTest(1)
then:
tester.result == "expected value"
}
def "測(cè)試用例二"() {
when:
prepareTest(2)
then:
tester.result == "expected value"
}
def prepareTest(parameter) {
tester = new TargetService()
tester.process(parameter)
}
而驗(yàn)證的部份也可以使用相同的模式來實(shí)作殖侵,以下是根據(jù)官方文件所建立的源代碼:
def tester
def "測(cè)試用例一"() {
when:
prepareTest(1)
then:
matchesResult()
}
def "測(cè)試用例二"() {
when:
prepareTest(2)
then:
matchesResult()
}
def prepareTest(parameter) {
tester = new TargetService()
tester.process(parameter)
}
void matchesResult() {
assert tester.result == "expected value"
}
在以上源代碼第 25 行的 Helper Method 中加入 assert 依據(jù)官方文件的說明是為了確保在測(cè)試結(jié)果輸出時(shí),可以顯示是哪一行驗(yàn)證結(jié)果不符合預(yù)期镰烧。而照實(shí)作的經(jīng)驗(yàn)拢军,如果把 assert 移除,發(fā)生驗(yàn)證失敗時(shí)不會(huì)顯示訊息怔鳖,甚至顯示測(cè)試通過的結(jié)果茉唉。
這里有個(gè)細(xì)節(jié)要注意的是 Helper Method 必須要明確的以 void 宣告無傳回值,否則 Spock 可能會(huì)依據(jù) Helper Method 的內(nèi)容解譯產(chǎn)生不符合預(yù)期的結(jié)果结执。另外有一個(gè)小差異是在 Android Studio 里度陆,如果使用 '&&' 的語法串起所有的驗(yàn)證指令,沒有辦法像官方文件所示范的把 '&&' 放在源代碼的最開頭献幔,必須要把 '&&' 放在源代碼的結(jié)尾后斷行懂傀,否則會(huì)顯示語法錯(cuò)誤的訊息。