How to mock PreparedStatementCreator and verify PreparedStatement

Viewed 22

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.

0 Answers
Related