【问题标题】:How to make a List of Strings in Groovy如何在 Groovy 中制作字符串列表
【发布时间】: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&lt;String&gt; xxx.... 替换为List xxx...,然后由def xxx... 替换为size() == 1。 [哭泣]

【问题讨论】:

  • 循环 for 有一个变量 textLines 在循环内声明,强制在下一个循环中重新声明它...
  • 正如我已经对 Leonard 说过的那样:我看不出你所描述的正在发生的事情。我只是无法复制它。如果可以,请告诉我您使用的是哪个 Spock 和 Groovy 版本,并提供完整的 MCVE,即完整的测试和完整的测试类。

标签: string list groovy spock


【解决方案1】:

请在这里查看我的回答https://stackoverflow.com/a/46801418/2145769 你遇到了同样的问题。

【讨论】:

  • 实际上,在复制和粘贴代码并使其可以使用示例类运行时,我没有看到任何此类行为。对我来说,它始终是 1 元素列表,在根据 OP 的计划修复代码后,测试运行得很好,没有任何强制转换或类型定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2015-02-15
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多