Easymock:matcher调用是在预期之外使用的

时间:2015-06-11 12:06:13

标签: java unit-testing junit easymock

我将代码中方法的返回值从void更改为Object。 然后两个junit测试失败,说明expect(...).andReturn(...)丢失了。添加后,一个测试是固定的,另一个仍然抛出一个看起来有点奇怪的异常:

java.lang.IllegalStateException:matcher调用在期望之外使用

适用于一个但不适用于另一个的代码是:

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

有什么想法吗?

3 个答案:

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