gpt4 book ai didi

groovy - Spock:可重用数据表

转载 作者:行者123 更新时间:2023-12-02 04:21:43 25 4
gpt4 key购买 nike

我可以进行这样的测试并将where子句数据表提取到可重用的 block 中吗?

@Unroll
void "test that doSomething with #a and #b does not fail"(String a, String b) {
when:
doSomethingWithAandB(a, b)
then:
notThrown(Exception)
where:
a | b
"foo" | "bar"
"foo" | "baz"
"foo" | "foo"
}

类似这样的东西(伪代码):

@Unroll
void "test that doSomethingElse with #a and #b does not fail"(String a, String b) {
when:
doSomethingElseWithAandB(a, b)
then:
notThrown(Exception)
where:
dataTable()
}

def dataTable(a, b) { // this is now reusable in multiple tests
a | b
"foo" | "bar"
"foo" | "baz"
"foo" | "foo"
}

最佳答案

where 中的表格格式数据子句实际上被解析为一组 OR编译时的表达式,收集到列表列表中然后转置,所以这样:

where:
a | b | c
1 | 0 | 1
2 | 2 | 2
4 | 5 | 5

将被转换成这样:

where:
a << [1, 2, 4]
b << [0, 2, 5]
c << [1, 2, 5]

在生成测试方法之前(有关详细信息,请参阅 org.spockframework.compiler.WhereBlockRewriter)。这个var << list documentation 中的构造被称为“数据管道” .

稍微升级一下现有的答案,从 Spock 1.1 开始,可以使用一种名为“多变量数据管道”的结构来稍微缩短代码,该结构将转置表格:

class SampleTest extends Specification {
@Unroll
def "max of #a and #b gives #c"() {
expect:
Math.max(a, b) == c
where:
[a, b, c] << dataTable()
}

static def dataTable() {
[
[1, 0, 1],
[2, 2, 2],
[4, 5, 5]
]
}
}
<小时/>

有趣的事实:而 docs on Syntactic Variations不解释为什么,这是因为表行被解析为一组 OR表达式中,也可以使用双杠 -

where:
a | b || c
1 | 0 || 1
2 | 2 || 2
4 | 5 || 5

关于groovy - Spock:可重用数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com