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);
}
Author by
Mitja Rogl
Updated on June 04, 2022Comments
-
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 about 11 yearsI have added this method but it is stil ` Unexpected method call`.
-
hoaz about 11 yearsyou need to add it for
addUser
call too as I mentioned above -
Mitja Rogl about 11 yearsYes I did it the same as it is above.
-
hoaz about 11 yearsI think you have not updated code, anyway I guessed parameters and updated my solution
-
Mitja Rogl about 11 yearsNow 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 about 11 yearsok, your method has return value, so you need to use
expect
instead ofexpectLastCall
: EasyMock.expect(mockDAO.checkUser(u)).andReturn(true); -
Mitja Rogl about 11 yearsI finally put it to work. If I have login to test, then should I use
assertTrue(service.login(u));
? Thank for help. -
hoaz about 11 yearsyes, i would also cover fail scenario, when login returns false