jUnit Unexpected method call DAO Easymock

12,713

Your UserService#registration method calls UserDAO#checkUser method, 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:

@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);

}
Share:
12,713
Mitja Rogl
Author by

Mitja Rogl

Updated on June 04, 2022

Comments

  • Mitja Rogl
    Mitja Rogl about 2 years

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

    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$$1a06d4a9.checkUser(<generated>)
    at si.soa.rentacar.ws.impl.UserService.registration(UserService.java:117)
    at si.soa.rentacar._testUser.testAddUser(_testUser.java:58)
         ....
    
  • Mitja Rogl
    Mitja Rogl about 11 years
    I have added this method but it is stil ` Unexpected method call`.
  • hoaz
    hoaz about 11 years
    you need to add it for addUser call too as I mentioned above
  • Mitja Rogl
    Mitja Rogl about 11 years
    Yes I did it the same as it is above.
  • hoaz
    hoaz about 11 years
    I think you have not updated code, anyway I guessed parameters and updated my solution
  • Mitja Rogl
    Mitja Rogl about 11 years
    Now I have update but now I get this error in test: java.lang.IllegalStateException: missing behavior definition for the preceding method call: UserDAO.checkUser(si.soa.rentacar.model.User@78bc6d6a) Usage is:expect(a.foo()).andXXX()
  • hoaz
    hoaz about 11 years
    ok, your method has return value, so you need to use expect instead of expectLastCall: EasyMock.expect(mockDAO.checkUser(u)).andReturn(true);
  • Mitja Rogl
    Mitja Rogl about 11 years
    I finally put it to work. If I have login to test, then should I use assertTrue(service.login(u));? Thank for help.
  • hoaz
    hoaz about 11 years
    yes, i would also cover fail scenario, when login returns false