我将代码中方法的返回值从void
更改为Object
。
然后两个junit测试失败,说明expect(...).andReturn(...)
丢失了。添加后,一个测试是固定的,另一个仍然抛出一个看起来有点奇怪的异常:
java.lang.IllegalStateException:matcher调用在期望之外使用
适用于一个但不适用于另一个的代码是:
expect(myMock.foo(1l,FooEnum.A)).andReturn(EasyMock.anyObject(String.class));
有什么想法吗?
答案 0 :(得分:6)
EasyMock.anyObject(String.class)
是一个匹配器,它不是String
,除了匹配之外不能用作String
- 匹配如下所示:< / p>
when(foo.bar(EasyMock.anyObject(String.class))).thenReturn("foo-bar")
P.S。你应该尽可能避免使用new String()
;最好更好地使用""
。
答案 1 :(得分:0)
我改为代码
expect(myMock.foo(1l,FooEnum.A)).andReturn(new Object());
现在它有效。由于我肯定会返回new Object
(而不是null
或其他任何内容)
答案 2 :(得分:0)
我遇到了与AmazonSQSClient
对象相同的问题。我尝试了.andReturn(new Object())
,但遇到了不兼容的类型错误。要解决此问题,只需返回方法所需类型的新对象:
expect(amazonSQSClient.getQueueAttributes(queueUrl, attributeNames)).andReturn(new GetQueueAttributesResult());