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());