使用easymock收到错误

jto*_*fer 5 java easymock junit4

我正在开发一个新项目,他们一直在使用EasyMock(v2.4),我并不熟悉它.我需要能够做到以下几点,但没有人有答案.根据BaseDao.class以下示例,当前框架使用了我想模拟的内容,但是我收到了错误.我正在寻找一些方向.

BaseDao baseDao = EasyMock.mock(BaseDao.class);

EasyMock.expect(baseDao.findByNamedQuery("abc.query"), EasyMock.anyLong()).andReturn(...);
EasyMock.replay(baseDao);

EasyMock.expect(baseDao.findByNamedQuery("def.query"), EasyMock.anyLong).andReturn(..);
EasyMock.replay(baseDao);
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下......

java.lang.AssertionError: 
  Unexpected method call findByNamedQuery("def.query"):
    findByNamedQuery("abc.query", 1): expected: 1, actual: 0
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:32)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:61)
at $Proxy5.findByNamedQuery(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

aym*_*ric 1

您正在定义replay(...)两次,因此只有第一个才有效。它是这样定义的,直到您调用reset(...).

要解决该问题,您可以:

1) 删除导致测试失败的调用:

EasyMock.expecting(baseDao.findByNamedQuery("def.query"), EasyMock.anyLong)
   .andReturn(...);
EasyMock.replay(baseDao);
Run Code Online (Sandbox Code Playgroud)

2)您可以期望任何字符串,而不是在您的期望中定义固定字符串:

EasyMock.expecting(baseDao.findByNamedQuery((String)EasyMock.anyObject()), 
   EasyMock.anyLong).andReturn(...);
Run Code Online (Sandbox Code Playgroud)