How does Mockito mock a insert method of returning primary key using myBatis

Viewed 1810

ServiceImpl class has an add() method using Mybatis insert() return “isSuccess Tag” and auto record the User object's id,when mock add() method using Mockito, we can't get user id value and NulPointerException occurs.

 public class ServiceImpl{
        public int add() {
            User newUser = new User();
            newUser.setName("uName");
            UserDao userDao=new UserDao();
            userDao.add(newUser);  //Using myBatis insert() method,and it function is auto assign user.Id and return completed row number.     
            int userId = newUser.getId();
         }
    }

        //methodTest
        public class ServiceImplTest
        {
            @Test
            public void addTest()
            {
              UserDao userDao=Mockito.mock(UserDao.class);
              when(userDao.add(isA(User.class))).thenReturn(1);//NullPointException in newUser.getId();
              ServiceImpl serviceImpl=new ServiceImpl();
              serviceImpl.add();
            }
        }

How to solve the problem? Thaks

2 Answers
User newUser = new User();
newUser.setName("uName");
when(UserDao.add(newUser)).thenAnswer(new Answer<Integer>() {
  @Override
  public User answer(InvocationOnMock invocationOnMock) throws Throwable {
    User newUser1 = invocationOnMock.getArgumentAt(0,User.class);                   
    newUser1.setId(1);
    return 1;
  }
});
Related