在 Spock 测试方法间共用源代码

在进行测试程序开发时,经常会有执行或验证的程序是在不同的测试用例间一直重覆,当然使用 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 里,如果使用 '&&' 的语法串起所有的验证指令,没有办法像官方文件所示范的把 '&&' 放在源代码的最开头,必须要把 '&&' 放在源代码的结尾后断行,否则会显示语法错误的讯息。

你可能感兴趣的:(在 Spock 测试方法间共用源代码)