以下為測試方法共用程式碼的範例:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def tester | |
def "測試案例一"() { | |
when: | |
prepareTest(1) | |
then: | |
tester.result == "expected value" | |
} | |
def "測試案例二"() { | |
when: | |
prepareTest(2) | |
then: | |
tester.result == "expected value" | |
} | |
def prepareTest(parameter) { | |
tester = new TargetService() | |
tester.process(parameter) | |
} |
而驗證的部份也可以使用相同的模式來實作,以下是根據官方文件所建立的程式碼:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def tester | |
def "測試案例一"() { | |
when: | |
prepareTest(1) | |
then: | |
matchesResult() | |
} | |
def "測試案例二"() { | |
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 依據官方文件的說明是為了確保在測試結果輸出時,可以顯示是哪一行驗證結果不符合預期。而照實作的經驗,如果把 assert 移除,發生驗證失敗時不會顯示訊息,甚至顯示測試通過的結果。
這裡有個細節要注意的是 Helper Method 必須要明確的以 void 宣告無傳回值,否則 Spock 可能會依據 Helper Method 的內容解譯產生不符合預期的結果。另外有一個小差異是在 Android Studio 裡,如果使用 '&&' 的語法串起所有的驗證指令,沒有辦法像官方文件所示範的把 '&&' 放在程式碼的最開頭,必須要把 '&&' 放在程式碼的結尾後斷行,否則會顯示語法錯誤的訊息。
0 意見:
張貼留言