Easymock:匹配器调用的使用超出预期
Easymock: matcher calls were used outside expectations
我将代码中方法的 return 值从 void
更改为 Object
。
然后两个 junit 测试失败,说明缺少 expect(...).andReturn(...)
。添加这些后,一个测试是固定的,另一个仍然抛出一个看起来有点奇怪的异常:
java.lang.IllegalStateException:在预期之外使用了匹配器调用
适用于一个但不适用于另一个的代码是:
expect(myMock.foo(1l,FooEnum.A)).andReturn(EasyMock.anyObject(String.class));
有什么想法吗?
我改代码为
expect(myMock.foo(1l,FooEnum.A)).andReturn(new Object());
现在可以了。为什么我得到这个错误仍然很奇怪,因为我肯定 return a new Object
(而不是 null
或任何东西)
EasyMock.anyObject(String.class)
是一个匹配器,它不是 String
并且不能用作 String
除了匹配 - 匹配如下所示:
when(foo.bar(EasyMock.anyObject(String.class))).thenReturn("foo-bar")
P.S。你应该尽可能避免使用 new String()
;使用 ""
总是更好。
我在 AmazonSQSClient
对象上遇到了同样的问题。我尝试了 .andReturn(new Object())
,但出现类型不兼容的错误。要解决此问题,只需 return 方法期望的类型的新对象:
expect(amazonSQSClient.getQueueAttributes(queueUrl, attributeNames)).andReturn(new GetQueueAttributesResult());
我将代码中方法的 return 值从 void
更改为 Object
。
然后两个 junit 测试失败,说明缺少 expect(...).andReturn(...)
。添加这些后,一个测试是固定的,另一个仍然抛出一个看起来有点奇怪的异常:
java.lang.IllegalStateException:在预期之外使用了匹配器调用
适用于一个但不适用于另一个的代码是:
expect(myMock.foo(1l,FooEnum.A)).andReturn(EasyMock.anyObject(String.class));
有什么想法吗?
我改代码为
expect(myMock.foo(1l,FooEnum.A)).andReturn(new Object());
现在可以了。为什么我得到这个错误仍然很奇怪,因为我肯定 return a new Object
(而不是 null
或任何东西)
EasyMock.anyObject(String.class)
是一个匹配器,它不是 String
并且不能用作 String
除了匹配 - 匹配如下所示:
when(foo.bar(EasyMock.anyObject(String.class))).thenReturn("foo-bar")
P.S。你应该尽可能避免使用 new String()
;使用 ""
总是更好。
我在 AmazonSQSClient
对象上遇到了同样的问题。我尝试了 .andReturn(new Object())
,但出现类型不兼容的错误。要解决此问题,只需 return 方法期望的类型的新对象:
expect(amazonSQSClient.getQueueAttributes(queueUrl, attributeNames)).andReturn(new GetQueueAttributesResult());