I tried everything but I didn't find any answer on how to write JUNIT for PreparedStatementCreator and verify createPreparedStatement method. Please help with junit mockito for below statement.
public User createUser(DummyUser dummyUser) throws UserException{
try {
String sql = "INSERT INTO users" +
"(name, firstname, lastname)" +
" VALUES (?, ?, ?)";
final PreparedStatementCreator preparedStatementCreator = connection -> {
final PreparedStatement preparedStatement = connection.prepareStatement(sql, new String[]{"userid"});
preparedStatement.setString(1, "James Bond");
preparedStatement.setString(2, "James");
preparedStatement.setString(3, "Bond");
return preparedStatement;
};
final KeyHolder holder = new GeneratedKeyHolder();
jdbcTemplate.update(preparedStatementCreator, holder);
int userId = 0;
holder.getKeyList();
if (!holder.getKeyList().isEmpty()) {
// null check
Map<String, Object> holderMap = holder.getKeyList().get(0);
userId = (int) holderMap.get("userid");
}
dummyUser.setUserId(userId);
} catch (Exception e) {
throw new UserException(e.getMessage());
}
return dummyUser;
}
here is my simple junit test
@Test
public void testCreateUser(){
when(mockJdbcTemplate.update(any(PreparedStatementCreator.class), any(KeyHolder.class))).thenReturn(1);
assertThat(userDao.createUser(mockedDummyUser),is(notNullValue()));
}
Test case is passing but I want to cover each line, like verify preparedStatement.setString etc.
But I didn't find any solution on stackoverflow and anywhere, please help.