【发布时间】:2018-11-28 14:35:51
【问题描述】:
我对这里发生的事情有点困惑。我正在尝试进行测试,以测试addLDocument() 是否通过了Strings 的List,其中List 中有10 个Strings。有多个对addLDocument 的调用......它们通常应该在List 中作为参数传递10 个Strings。
显然测试目前应该失败(确实是,但方式错误),因为我目前一次只能通过一个String。目的是通过将后续的Strings 打包成 10 个批次来更改代码以使测试通过。
for( String textLine : allTextLines ) {
List<String> textLines = []
textLines.add( textLine )
addLDocument( textLines )
}
def addLDocument( List<String> textLines ) {
...
}
在我的测试中,我有这个:
given:
List stringVal
...
then:
1 * spyCH.addLDocument( _ ) >> {
arguments -> stringVal = arguments[ 0 ]
}
println "stringVal $stringVal size ${stringVal.size()}"
stringVal.size() == 10
then:
( 1 .. _ ) * spyCH.addLDocument( _ ) >> null
...不幸的是,无论我做什么,stringVal.size() 都在计算Strings 包含在@987654336 中的字符 的总数@。
为什么会这样?如何强制textLines 包含一组不同的Strings,并让size() 给出List 中此类元素的数量?
稍后
天哪,现在令人费解的不一致:在添加了 daggett 建议的行之后,我尝试“回滚”:我必须做什么才能回到“错误”的字符数,而不是元素数。将List<String> xxx.... 替换为List xxx...,然后由def xxx... 替换为size() == 1。 [哭泣]
【问题讨论】:
-
循环
for有一个变量textLines在循环内声明,强制在下一个循环中重新声明它... -
正如我已经对 Leonard 说过的那样:我看不出你所描述的正在发生的事情。我只是无法复制它。如果可以,请告诉我您使用的是哪个 Spock 和 Groovy 版本,并提供完整的 MCVE,即完整的测试和完整的测试类。