在Spock测试中,下划线(_)的含义是什么?

8
在 Spock 的一个测试中,我看到了一个奇怪的条件在 then 块中:
0 * someInstance._

这是什么意思?

2个回答

14

_是通配符,可以匹配任何对象。请参考这里查看它的具体实现方式,以及这里的文档。_常用于检查调用一个方法时参数不重要的情况,例如:

1 * obj.method(1, _)

在这种特定情况下,它会检查在实例 obj 上调用的方法 method 是否恰好一次,并将 1 作为第一个参数和 任何 作为第二个参数。


1
这是一个更友好的 链接,用于解释 Spock 文档中的通配符和基数,特别是针对您的情况(匹配任何方法调用)。 - Gregor Petrin
1
拥有两者都是好的,对吧?不管怎样,Spock文档存在两个地方,而Google Code版本看起来相当不友好,所以我认为提供一个现代版本的链接总是好的。 - Gregor Petrin
当然,这就是我将其添加到答案中的原因。再次感谢! - Opal
啊,没看到那个 :) - Gregor Petrin
1
在这种情况下,检查了对 someInstance 的任何方法调用的非交互。简单来说,没有与 someInstance 对象的交互。 - Opal
显示剩余2条评论

-1

编辑:我的回答没有解决运算符的问题,而是涉及到了一个无关的问题。正确的答案可以在上面看到。


_通常用于表示私有内容/变量,例如在Groovy/Javascript等语言中,这些语言不遵循或提供可见性指令。

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


Java和Groovy具有可见性指令,因此不需要使用下划线表示私有变量。此外,变量应该在下划线后至少有一些文本来澄清其含义。在这种情况下,它是一个特定于Spock的通配符,正如其他答案所正确指出的那样。 - Gregor Petrin
你关于通配符使用下划线的说法是正确的(提供链接做得很好,不容易找到)。Groovy在很长一段时间内忽略了可见性指令,你能否提供一个文档链接,证明这个问题已经得到解决? - Dennis
还没有解决这个问题。Groovy仍然特别处理可见性。我不知道是否有一个应用于Groovy的惯例,例如来自Python的惯例。 - Opal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接