java jUnit 意外方法调用 DAO Easymock

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16571017/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 23:20:40  来源:igfitidea点击:

jUnit Unexpected method call DAO Easymock

javamockingtdddaoeasymock

提问by Mitja Rogl

I am newbie with mock testing. I want to test my DAO for users. Here is my code.

我是模拟测试的新手。我想为用户测试我的 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);

}

When I run it I get this error:

当我运行它时,我收到此错误:

Updated the stacktrace:

更新了堆栈跟踪:

  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$a06d4a9.checkUser(<generated>)
at si.soa.rentacar.ws.impl.UserService.registration(UserService.java:117)
at si.soa.rentacar._testUser.testAddUser(_testUser.java:58)
     ....

回答by hoaz

Your UserService#registrationmethod calls UserDAO#checkUsermethod, so you need to add it to expectation list. I don't know its parameters, so I am providing you only sample for addUser call below:

您的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);

}