2014-09-03 34 views
1

我在幾個Spock規範的源代碼中看到了_._。有誰知道這意味着什麼?這是什麼意思__在Groovy/Spock

例如,

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

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

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

    then: 
    str == 'returnedValue' 
} 
+1

它似乎意味着*「任何互動。」*請參閱https://code.google.com/p/spock/wiki/Interactions – 2014-09-03 17:19:48

回答

6

_是像通配符。

_.someMethod() 

指稱爲任何嘲笑對象的方法someMethod,同樣

myDomain._ 

意味着什麼呼籲myDomain

並遵循該邏輯_._表示在任何模擬對象上調用的任何東西。如果你不希望有更多的方法被稱爲這可能是有用的:

0 * _._ 

額外的閱讀

你應該對這樣的東西更多信息,請閱讀the docs_可用於。

+0

哦,謝謝你的快速反應。在我提供的示例中,我們爲模擬對象的方法定義了期望的行爲。預計會被調用一次,因此'1 *'。但是接下來會有'_._'。這是否意味着'0 * _._'意味着任何其他類的其他方法都不會被調用? – aa8y 2014-09-03 17:21:05

+1

'0 * _._'意思就是你寫的。一些開發者在測試方法的最後添加它以確保沒有其他交互發生。這不是一個好習慣。 – Opal 2014-09-03 17:23:51

+0

@Opal你能解釋一下爲什麼這不是一個好習慣嗎? – aa8y 2014-09-03 17:26:00