【问题标题】:Easymock: matcher calls were used outside expectationsEasymock:匹配器调用的使用超出预期
【发布时间】:2015-06-11 12:06:12
【问题描述】:

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

java.lang.IllegalStateException:匹配器调用超出预期

适用于其中一种但不适用于另一种的代码是:

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

有什么想法吗?

【问题讨论】:

    标签: java unit-testing junit easymock


    【解决方案1】:

    EasyMock.anyObject(String.class) 是一个匹配器,它不是 String,不能用作 String,除了匹配 - 匹配类似于以下内容:

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

    附:你应该尽可能避免使用new String();最好改用""

    【讨论】:

    • when() 不是 Mockito 方法而不是 easymock 方法吗?
    • 是的,它是 Mockito,不过我认为在 easymock 中有一个等价物
    【解决方案2】:

    我在使用 AmazonSQSClient 对象时遇到了同样的问题。我尝试了.andReturn(new Object()),但出现了不兼容的类型错误。要解决此问题,只需返回该方法所需类型的新对象:

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

    【讨论】:

      【解决方案3】:

      我把代码改成了

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

      现在它可以工作了。为什么我会收到这个错误仍然很奇怪,因为我肯定会返回 new Object(而不是 null 或任何东西)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多