java - 使用 easymock 收到错误

标签 java junit4 easymock

我正在开发一个新项目,他们一直在使用 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/

相关文章:

java - 为什么我需要抽象类中的构造函数?

java - 在 JUnit 测试中,有没有一种方法可以确保所有断言都已执行?

Java:使用 Stream API 在嵌套列表中查找常见项目

java - "A JNI error has occurred, please check your installation and try again"运行java程序

java - 从集群外部查找hadoop集群中的节点列表

java - 你如何使用 spring 的注入(inject)来对 Controller 进行单元测试?

java - 如何使用 JUnit 和 EasyMock 在 MVC 集成测试中模拟 View

java - 给字节赋值

junit4 - Java Batch 的 JUnit 测试用例

java - 使用 EasyMock 模拟链式方法