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 short
、For long
、For normal
。这优先于第二个选项:
- 通过普通方法名称命名方法,在我的示例中将导致方法名称
I check flag value eleven
、I check flag value twenty-two
、I check flag value thirty-three
.
我通过注释掉 unroll 参数选择了选项 2。
我绝对需要一些帮助。我有一个 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 short
、For long
、For normal
。这优先于第二个选项: - 通过普通方法名称命名方法,在我的示例中将导致方法名称
I check flag value eleven
、I check flag value twenty-two
、I check flag value thirty-three
.
我通过注释掉 unroll 参数选择了选项 2。