spock 如何确定哪个迭代器大于另一个?

How does spock determine which iteratable is greater than the other?

我正在 spock 中阅读此文档:http://spockframework.org/spock/docs/1.1/data_driven_testing.html 并遇到了具有以下代码片段的数据变量分配部分:

a = 3
b = Math.random() * 100
c = a > b ? a : b

但是如果我尝试使用可迭代对象会怎样

a << [6, 2, 0]
b << [4, 10, 10]
c = a > b ? a : b

没有。

Spock 会大量重写您的测试规范(通过使用 groovy 编译器注册 AST 转换)。

对于 where: 子句,它创建代码以迭代到为 ab 提供的列表(并将每个值依次分配给这些局部变量)并运行每次迭代 c = a > b ? a : b 的代码。

where: 子句的代码转换位于 class org.spockframework.compiler.WhereBlockRewriter (https://github.com/spockframework/spock/blob/master/spock-core/src/main/java/org/spockframework/compiler/WhereBlockRewriter.java)