在Groovy/Spock中___是什么意思

aa8*_*a8y 2 groovy spock

我_._在一些Spock规范的源代码中看到过.有谁知道这意味着什么?

例如,

def "test something"() {
    given:
    someClass = Mock(SomeClass)

    and:
    1 * someClass.someMethod() >> returnSomething
    0 * _._

    when:
    String str = someClass.someMethod().toString()

    then:
    str == 'returnedValue'
}
Run Code Online (Sandbox Code Playgroud)

chr*_*her 9

_ 就像一张通配符.

_.someMethod()
Run Code Online (Sandbox Code Playgroud)

同样意味着someMethod调用任何模拟对象的方法

myDomain._
Run Code Online (Sandbox Code Playgroud)

意味着什么叫做myDomain.

遵循该逻辑_._意味着任何调用任何模拟对象的东西.如果您不想再调用任何方法,这可能很有用:

0 * _._
Run Code Online (Sandbox Code Playgroud)

额外阅读

您应该阅读文档以获取有关_可用于的事物种类的更多信息.

  • `0 * _._` 正是您所写的意思。一些开发人员将其添加在测试方法的最后,以确保不会发生其他交互。这不是一个好的做法。 (2认同)
  • 因为当您以这种方式开发测试时,它们将被“修复”。例如,重构和引入代码更改很困难,因为您引入了编写测试时未考虑的新交互-尽管仍然保留了合同,但结果还是失败。 (2认同)
  • `0 * _._` 可以缩写为 `0 * _`。详细的解释可以在 http://docs.spockframework.org 找到。 (2认同)