Groovy / Spock-数据驱动测试excel表中的值

时间:2018-01-23 21:01:05

标签: groovy spock

我绝对可以在这里使用一些帮助。我有一个excel表,我从中获取值并对它们进行一些验证,我正在检查两个值是否匹配。我的代码如下:

@Unroll ("For #calcToCheck.tr_date_class")
def "I check flag value #calcToCheck.tr_date "(CalculationClass calcToCheck) {        
    expect:
    flag==calcToCheck.result

    where:
    calcToCheck << calInputParameters()
}

def calInputParameters() {
    //some logic to get values from SQL and getting flag
    return calcsToCheck
}

这对于一行运行良好但是当我在excel表中插入多行时,我只得到输出作为一个结果。我想看看每一行的结果。我想添加@Unroll会照顾它,显示它显示结果的行但不是。

1 个答案:

答案 0 :(得分:0)

以下是您可以运行然后修改的示例代码。因为你没有解释flag来自哪里,所以我只是编造了一些东西,假设它也是一个展开的参数,而不是你帮助方法提供的任何参数。

package de.scrum_master.stackoverflow

import spock.lang.Specification
import spock.lang.Unroll

/**
 * See https://stackoverflow.com/q/48410722/1082681
 */
class PseudoExcelTableTest extends Specification {
  @Unroll//("For #calcToCheck.tr_date_class")
  def "I check flag value #calcToCheck.tr_date"(CalculationClass calcToCheck, int flag) {
    expect:
    flag == calcToCheck.result

    where:
    calcToCheck << calInputParameters()
    flag << [11, 22, 33]
  }

  def calInputParameters() {
    def calcsToCheck = new ArrayList<CalculationClass>()
    calcsToCheck.addAll(
      new CalculationClass(result: 11, tr_date: "eleven", tr_date_class: "short"),
      new CalculationClass(result: 22, tr_date: "twenty-two", tr_date_class: "long"),
      new CalculationClass(result: 33, tr_date: "thirty-three", tr_date_class: "normal")
    )
    return calcsToCheck
  }

  static class CalculationClass {
    int result
    String tr_date
    String tr_date_class
  }
}

对于展开的方法名称,你混淆了两件事:

  • 通过@Unroll参数命名方法,在我的示例中,这将导致方法名称For shortFor longFor normal。这优先于第二种选择:
  • 通过普通方法名称命名方法,在我的示例中,这将导致方法名称I check flag value elevenI check flag value twenty-twoI check flag value thirty-three

我通过注释掉unroll参数来选择选项2.