我正在开发一个新项目,他们一直在使用 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);
我得到的错误如下...
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)
最佳答案
您定义了 replay(...)
两次,因此只有第一个有效。在您调用 reset(...)
之前,它的定义是这样的。
要解决此问题,您可以:
1) 删除导致测试失败的调用:
EasyMock.expecting(baseDao.findByNamedQuery("def.query"), EasyMock.anyLong)
.andReturn(...);
EasyMock.replay(baseDao);
2) 您可以期望任何字符串,而不是定义您期望的固定字符串:
EasyMock.expecting(baseDao.findByNamedQuery((String)EasyMock.anyObject()),
EasyMock.anyLong).andReturn(...);
关于java - 使用 easymock 收到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12205402/