在Spock中有没有什么方法可以在使用数据表时透明地获取当前运行计数,而不需要将其作为显式输入参数?
比如说
class MathSpec extends Specification {
def "maximum of two numbers"(int a, int b, int c) {
expect:
Math.max(a, b) == c
println "this is row:" + $currentRowCount//??
where:
a | b | c
1 | 3 | 3
7 | 4 | 4
0 | 0 | 0
}
}
3条答案
按热度按时间3npbholx1#
这真的很难看,因为
iterationCount
是一个私有变量,但也是可能的:示例规范:
控制台日志:
请注意,这只适用于
@Unroll
艾德特征方法,没有该注解则不适用。更新:通过全局Spock扩展公开迭代计数
您可能知道built-in Spock extensions,它们大多是注解驱动的,如
@Ignore
、@Timeout
、@Stepwise
、@Issue
、@AutoCleanup
,但也有一些全局扩展,手册中没有描述,但仍然存在,如ReportLogExtension
、IncludeExcludeExtension
。不幸的是,手册没有描述如何创建这样的扩展,但通过一些谷歌搜索和源代码研究你可以找到答案。虽然对初学者来说没什么。
全局Spock扩展名:
此扩展将动态成员
iterationCount
添加到每个Spock规范中。每个扩展都需要注册。所以请添加一个包含以下内容的
META-INF/services/org.spockframework.runtime.extension.IGlobalExtension
文件到您的测试资源中:陈列柜规格:
控制台日志:
正如您所看到的,无论是否使用
@Unroll
,扩展都能正常工作。在这方面,它也比上面的quick & dirty解决方案更好。顺便说一句,如果您希望计数从1开始而不是从0开始,只需在扩展侦听器方法
beforeIteration
中将表达式iterationCount++
切换为++iterationCount
。uemypmqf2#
可以将
@Unroll
与#iterationCount
一起使用,即:PS:不要叫你的类
Math
,然后试着叫Math.max
;- )j2qf4p5b3#
只是为了更新这个答案。在spock版本2.1-groovy-3.0上验证,以获得行号,用途:
A级