es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Clase de repositorio de burla en Spring Boot

Quiero probar mi clase de capa de repositorio usando JUnit y Mockito. Como tengo muchas tablas de base de datos, no voy a utilizar una base de datos en memoria para simular mi base de datos. Necesito probar el siguiente método que utiliza la clase JdbcTemplate para obtener datos de la base de datos.

public List <EmployeeSqlDTO> findEmployees(String sqlQuery) {
    List <EmployeeSqlDTO> list = new ArrayList <> ();
    EmployeeSqlDTO sqlDTO;
    SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sqlQuery, 1, 1);

    while (rowSet.next()) {
        sqlDTO = new EmployeeSqlDTO();
        sqlDTO.setId(rowSet.getInt("id"));
        sqlDTO.setName(rowSet.getString("name"));
        sqlDTO.setEmail(rowSet.getString("email"));
        list.add(sqlDTO);
    }
    return list;
}

La clase EmployeeSqlDTO contiene tres variables de instancia (id, name, email) con getters y setters.
Necesito probar el método anterior usando Mockito y JUnit. ¿Existe una manera adecuada de probar el código anterior?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible probar el código anterior usando Mockito y JUnit.

    Aquí hay un código de prueba de muestra para el método findEmployees:

    @RunWith(MockitoJUnitRunner.class)
    public class EmployeeRepositoryTest {
    
        @InjectMocks
        private EmployeeRepository employeeRepository;
    
        @Mock
        private JdbcTemplate jdbcTemplate;
    
        @Test
        public void testFindEmployees() {
            List<employeesqldto> expectedList = new ArrayList<>();
            EmployeeSqlDTO sqlDTO = new EmployeeSqlDTO();
            sqlDTO.setId(1);
            sqlDTO.setName("John Doe");
            sqlDTO.setEmail("john.doe@example.com");
            expectedList.add(sqlDTO);
    
            String query = "SELECT * FROM employees WHERE id = ?";
            Object[] args = new Object[] { 1 };
    
            SqlRowSet rowSet = mock(SqlRowSet.class);
            when(jdbcTemplate.queryForRowSet(query, args)).thenReturn(rowSet);
            when(rowSet.next()).thenReturn(true).thenReturn(false);
            when(rowSet.getInt("id")).thenReturn(1);
            when(rowSet.getString("name")).thenReturn("John Doe");
            when(rowSet.getString("email")).thenReturn("john.doe@example.com");
    
            List<employeesqldto> actualList = employeeRepository.findEmployees(query, args);
    
            assertEquals(expectedList, actualList);
        }
    }
    

    En este código, estamos simulando los objetos JdbcTemplate y SqlRowSet usando anotaciones Mockito. Luego, estamos configurando el comportamiento esperado de estos objetos cuando se llaman los métodos queryForRowSet y next. Finalmente, estamos comparando las listas esperada y real que se generan a partir del método findEmployees.

    Tenga en cuenta que estamos pasando la consulta y los argumentos como parámetros separados al método findEmployees. Esto nos permite pasar diferentes consultas y argumentos para diferentes casos de prueba, haciendo que las pruebas sean más completas.

Comments are closed.