【问题标题】:What _ (underscore) means in Spock tests?Spock 测试中的 _(下划线)是什么意思?
【发布时间】:2015-02-08 07:56:02
【问题描述】:

在其中一个 Spock 测试中,我在 then 块中看到了一个奇怪的情况:

0 * someInstance._

什么意思?

【问题讨论】:

    标签: testing groovy spock


    【解决方案1】:

    _ 是通配符,任何对象。请参阅here 以了解其具体实现方式和here 以了解文档。 _ 例如,它用于检查方法的调用哪个参数无关紧要,然后它看起来像:

    1 * obj.method(1, _)
    

    在这种特殊情况下,它会检查实例 obj 上的方法 method 是否仅以 1 作为第一个参数和 anything 作为第二个参数调用了一次。

    【讨论】:

    • 对解释通配符和基数 (your specific case) 的 Spock 文档更友好的 link
    • 感谢@GregorPetrin!我想展示实现,而不是用法,但它非常有用。
    • 两者兼得很好,对吧?无论如何,Spock 在两个地方都有文档,而且 Google 代码版本看起来相当不友好,所以我认为提供现代版本的链接总是好的。..
    • 当然,这就是我将其添加到答案中的原因。再次感谢!
    • 在这种特殊情况下,检查与someInstance 上的 any 方法调用的无交互。简单来说。没有与someInstance 对象的交互。
    【解决方案2】:

    编辑:我的回答没有解决运营商问题,而是指一个不相关的问题。正确答案见上图


    _ 通常用于表示诸如Groovy/Javascript 等语言中的私有内容/变量,它们现在遵循或提供可见性指令。

    虽然您仍然可以从类或实例外部访问它们,但开发人员试图告诉您此变量仅供内部使用。

    【讨论】:

    • Java 和 Groovy 具有可见性指令,因此不需要下划线的私有变量,此外,变量应在下划线后至少有 一些 文本以阐明其含义。在这种情况下,它是 Spock 特定的通配符,正如另一个答案正确指出的那样。
    • 您对下划线的通配符使用是正​​确的(提供链接做得很好,不容易获得)。 Groovy 长期以来一直忽略可见性指令,能否请您提供一个指向已解决此问题的文档的链接?
    • 尚未解决。 Groovy 仍然专门处理可见性。我不知道一个约定,例如来自应用于 groovy 的 python。
    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多