我正在做一个新项目,他们一直在使用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)发布于 2012-08-31 05:46:43
您定义了两次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(...);发布于 2012-08-31 05:11:37
看起来测试需要一个带有参数"abc.query“的方法调用,但是用"def.query”调用了这个方法。
一步一步地调试测试应该有助于发现问题。
发布于 2012-08-31 05:56:03
如果您希望findByNamedQuery被调用两次,则删除对replay方法的第一次调用。它只需要一次,在你对测试的所有期望都已经设置好之后。
BaseDao baseDao = EasyMock.mock(BaseDao.class);
EasyMock.expect(baseDao.findByNamedQuery("abc.query"), EasyMock.anyLong()).andReturn(...);
// Remove EasyMock.replay(baseDao);
EasyMock.expect(baseDao.findByNamedQuery("def.query"), EasyMock.anyLong).andReturn(..);
EasyMock.replay(baseDao);https://stackoverflow.com/questions/12205402
复制相似问题