2015-06-11 56 views
0

我將代碼中方法的返回值從void更改爲和Object。 然後兩個junit測試失敗,說明expect(...).andReturn(...)丟失。之後將這些一個測試是固定的,其他都還拋出這似乎有點怪異的例外:Easymock:匹配器調用被用在期望值外

java.lang.IllegalStateException:匹配調用中使用之外預期

它適用於一個而不是代碼另一種是:

expect(myMock.foo(1l,FooEnum.A)).andReturn(EasyMock.anyObject(String.class)); 

任何想法?

回答

0

我改代碼

expect(myMock.foo(1l,FooEnum.A)).andReturn(new Object()); 

,現在它的工作原理。它仍然奇怪爲什麼我得到這個錯誤,因爲我肯定返回new Object(而不是null或任何東西)

4

EasyMock.anyObject(String.class)是一個匹配,它不是一個String,不能用作String除了匹配 - 匹配如下所示:

when(foo.bar(EasyMock.anyObject(String.class))).thenReturn("foo-bar") 

PS儘可能避免使用new String();代之以使用""總是更好。

+0

心不是所述'()時'一個方法的Mockito而非EasyMock的一個? – Vihar

+0

字符串只是一個例子 - 真正的返回值是一個對象... – Lonzak

+0

是的,它是Mockito,我假設theres在easymock中的一個等價物雖然 – Karrde

0

我對AmazonSQSClient對象有同樣的問題。我試過.andReturn(new Object()),但得到了一個不兼容的類型錯誤。爲了解決這個問題,簡單地返回所述方法預計的類型的新的對象:

expect(amazonSQSClient.getQueueAttributes(queueUrl, attributeNames)).andReturn(new GetQueueAttributesResult());

相關問題