在进行测试程序开发时,经常会有执行或验证的程序是在不同的测试用例间一直重覆,当然使用 Spock 时也不例外。根据 Spock 的官方文件提到,在 Spock 中可以使用 Helper Methods 来把要被共用的源代码收纳于其中,并且在不同的测试方法间调用。
以下为测试方法共用源代码的范例:
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)
}
而验证的部份也可以使用相同的模式来实作,以下是根据官方文件所建立的源代码:
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 里,如果使用 '&&' 的语法串起所有的验证指令,没有办法像官方文件所示范的把 '&&' 放在源代码的最开头,必须要把 '&&' 放在源代码的结尾后断行,否则会显示语法错误的讯息。
网友评论