Groovy/Spock- 数据驱动测试来自 excel sheet 的值

Groovy/Spock- Data driven test for values from excel sheet

我绝对需要一些帮助。我有一个 excel sheet 从那里获取值并对它们进行一些验证,我正在检查两个值是否匹配。我的代码如下:

@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 sheet 中插入多行时,我只得到一个输出结果。我想查看每一行的结果。我以为添加 @Unroll 会处理它向我显示它显示结果的行,但它没有。

这是一些示例代码,您可以 运行 然后进行修改。因为你没有解释 flag 的来源,我只是在编造一些东西,假设它也是一个展开的参数,根据你的辅助方法提供的任何内容进行检查。

package de.scrum_master.Whosebug

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

/**
 * See 
 */
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。