【问题标题】:Groovy/Spock- Data driven test for values from excel sheetGroovy/Spock - 数据驱动测试来自 excel 表的值
【发布时间】:2018-01-23 21:01:04
【问题描述】:

我绝对可以在这里使用一些帮助。我有一个 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 会处理它向我显示它正在显示结果的行,但它没有。

【问题讨论】:

  • calcsToCheck的类型是什么?
  • def calcsToCheck = new ArrayList,它适用于一行但不止一行,虽然结果是我想要的,但我在 IDE 的“运行”选项卡中看不到每一行
  • 尝试调试您的calInputParameters() 方法以确保您有许多CalculationClass 对象。测试看起来正确。

标签: groovy spock


【解决方案1】:

这是一些您可以运行然后修改的示例代码。因为您没有解释 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。

【讨论】:

  • 让我用这个逻辑看看会发生什么,谢谢你的帮助
  • Kriegaex,您的解决方案有所帮助。我选择了第一个选项。谢谢。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2016-10-09
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2020-12-01
相关资源
最近更新 更多