Home > Software engineering >  UNIT TEST: queryForObject method not fully covered the lines
UNIT TEST: queryForObject method not fully covered the lines

Time:12-27

I am trying to mock queryForObject method using Mockito. Unit test actually is passed but the lines is not fully covered.

The code to get the people object is like below:

jdbcTemplate.queryForObject(GET_PEOPLE,
        (rs, rowNum) -> new People()
                .setId(rs.getInt("id"))
                .setFirstName(rs.getString("first_name"))
                .setLastName(rs.getString("last_name")),
        department, position);

FYI: GET_PEOPLE is a static constant contain the SQL query.

and the unit test is:

People people = new People();
people.setId(1);
people.setFirstName("John");
people.setLastName("Doe");

when(jdbcTemplate.queryForObject(any(), (RowMapper<Object>) any(), any())).thenReturn(people);

Can anyone let me know how to mock to get the lines fully covered. Thanks in advance.

CodePudding user response:

You are not getting coverage because you never execute that code.

You need to call your rowmapper:

@ExtendWith(MockitoExtension.class)
public class MyTest {
    @Mock
    JdbcTemplate jdbcTemplate;
    @Mock
    ResultSet resultSet;


    @Test
    public void myTest() throws SQLException {
        when(resultSet.getInt(1)).thenReturn(1);
        ...

        when(jdbcTemplate.queryForObject(any(), (RowMapper<People>) any(), any())).thenAnswer(new Answer<People>() {
            @Override
            public People answer(InvocationOnMock invocationOnMock) throws Throwable {
                RowMapper<People> rowMapper = invocationOnMock.getArgument(1);
                return rowMapper.mapRow(resultSet, 1);
            }
        });
        ...
    }
}
  • Related