【问题标题】:jUnit Unexpected method call DAO EasymockjUnit 意外的方法调用 DAO Easymock
【发布时间】:2013-05-15 17:04:19
【问题描述】:

我是模拟测试的新手。 我想为用户测试我的 DAO。这是我的代码。

private UserService service;
private UserDAO mockDAO;

@Before
public void setUp(){
    service=new UserService();
    mockDAO=createMock(UserDAO.class);
    service.setUserDao(mockDAO);
}

@Test
public void testAddUser(){

    mockDAO.addUser( (User) EasyMock.anyObject());
    EasyMock.replay(mockDAO);
    User u=new User();
    u.setUserName("x");
    u.setPass("y");
    service.registration(u);
    EasyMock.verify(mockDAO);

}

当我运行它时,我得到了这个错误:

更新了堆栈跟踪:

  java.lang.AssertionError: 
  Unexpected method call  UserDAO.checkUser(si.soa.rentacar.model.User@3655dba1):
  UserDao.addUser(<any>): expected: 1, actual: 0
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:85)
at org.easymock.internal.ClassProxyFactory$MockMethodInterceptor.intercept(ClassProxyFactory.java:94)
at si.soa.rentacar.dao.UserDAO$$EnhancerByCGLIB$$1a06d4a9.checkUser(<generated>)
at si.soa.rentacar.ws.impl.UserService.registration(UserService.java:117)
at si.soa.rentacar._testUser.testAddUser(_testUser.java:58)
     ....

【问题讨论】:

  • 你的 UserService#registration 方法调用了 UserDAO#checkUser 方法,所以你需要将它添加到期望列表中
  • @hoaz 那么期望列表到底是什么?能给个提示吗?
  • 请检查 javadoc 中的 EasyMock.expectLastCall() 或 EasyMock.expect()
  • 你有什么例子我应该如何在 DAO 中使用这种方法?

标签: java mocking tdd dao easymock


【解决方案1】:

您的UserService#registration 方法调用UserDAO#checkUser 方法,因此您需要将其添加到期望列表中。我不知道它的参数,所以我只为您提供下面的 addUser 调用示例:

@Test
public void testAddUser(){

    // prepare data
    User u = new User();
    u.setUserName("x");
    u.setPass("y");

    // expectation section
    mockDAO.addUser(u);
    EasyMock.expectLastCall();
    EasyMock.expect(mockDAO.checkUser(u)).andReturn(true);

    EasyMock.replay(mockDAO);

    // scenario
    service.registration(u);

    // verification
    EasyMock.verify(mockDAO);

}

【讨论】:

  • 我已经添加了这个方法,但它仍然是`意外的方法调用`。
  • 正如我上面提到的,您也需要为addUser 调用添加它
  • 是的,我做的和上面一样。
  • 我认为你没有更新代码,反正我猜到了参数并更新了我的解决方案
  • 好的,你的方法有返回值,所以你需要使用expect而不是expectLastCall:EasyMock.expect(mockDAO.checkUser(u)).andReturn(true);
猜你喜欢
  • 2011-01-08
  • 2013-02-24
  • 2012-05-22
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多