2010-11-30 77 views
1

我是Groovy的新手(對於JMock而言也是如此),並且在構建使用匹配器的模擬參數上的期望方面遇到了一些麻煩。當我嘗試做這樣的事情:在Groovy中使用JMock的Hamcrest匹配器

Expectations e = new Expectations(); 
    e.allowing(mockObject).doSomething(Expectations.with(aNonNull(ImmutableCollection.class))) 
    e.will(returnValue(someResponse)) 

它構建的期望值時,將導致以下錯誤:

groovy.lang.MissingMethodException: No signature of method: static org.jmock.Expectations.with() is applicable for argument types: (org.hamcrest.core.IsNot) values: [not null] 
Possible solutions: with(boolean), with(org.hamcrest.Matcher), with(byte), with(org.hamcrest.Matcher), with(char), with(org.hamcrest.Matcher) 

aNonNull返回Matcher<T>(org.hamcrest.core.IsNot實現Matcher<T>)和有一個採用匹配器的Expectations.with方法,所以我不確定爲什麼Groovy試圖找到一個帶有具體類而不是由aNonNull指定的接口的版本。我也嘗試將aNonNull的返回值轉換爲匹配器和Matcher<T>,而不會對錯誤進行任何更改。我不確定是否有關於混淆Groovy的泛型或其他需要檢查的內容。

+0

有涉及利基技術。因此,不太可能找到具有*déjàvu *經驗的人。然而,如果你可以將問題分解成一個最新的,可重複的測試用例,我相信這個問題可以被清除(如果不解決的話)。 – robbbert 2010-12-01 02:00:30

回答

1

根據JavaDoc,org.jmock.Expectations.with()是一個實例而不是靜態方法。這就是爲什麼你會得到一個錯誤。

順便說一下,專門爲Groovy構建的測試/模擬框架將使您的生活變得輕鬆很多(即使在測試Java代碼時)。例如,同樣的期望看起來像這樣的斯波克(http://spockframework.org):

mockObject.doSomething(_爲ImmutableCollection)>> someResponse

Groovy的另外嘲弄框架需要注意的是GMock (http://code.google.com/p/gmock/)。

+0

* facepalm *糟糕,是的,這絕對是我的問題。現在我可以做e.allowing(mockObject).doSomething(e.with(ImmutableList.of(expectedInput))),這也是失敗之前。當我試圖調用與之類似的aNonNull等Matchers的版本時,我得到了一個不同的錯誤,但我想我可能會考慮Spock。 – 2010-12-02 18:38:48

相關問題