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.

¿Puedo probar mi Repositorio en Spring Boot sin guardar realmente los datos de prueba en la base de datos?

Tengo una aplicación de Spring Boot con algunos puntos finales REST y tengo una base de datos MongoDB. Me gustaría crear una prueba que se ejecute cada vez que se construya el proyecto. La prueba simplemente debe tomar algunos datos simulados y ponerlos en la base de datos, y luego usar esos datos simulados para comprobar que los puntos finales devuelvan los resultados correctos. Si es posible, no quiero que los datos simulados realmente lleguen hasta la base de datos. Creo que he visto algo antes donde Spring puede simular la base de datos. ¿Alguien puede orientarme en la dirección correcta?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible simular la base de datos en las pruebas de Spring Boot. Spring proporciona una base de datos en memoria llamada H2 que se puede utilizar para simular la base de datos en las pruebas.

    Para utilizar H2, debes agregar la siguiente dependencia a tu proyecto:

    <dependency>
        <groupid>com.h2database</groupid>
        <artifactid>h2</artifactid>
        <scope>test</scope>
    </dependency>
    

    Una vez que hayas agregado la dependencia, puedes crear una clase de configuración para tus pruebas:

    @Configuration
    public class TestDatabaseConfig {
    
        @Bean
        public DataSource dataSource() {
            return new EmbeddedDatabaseBuilder()
                    .setType(EmbeddedDatabaseType.H2)
                    .addScript("schema.sql")
                    .build();
        }
    }
    

    En la clase de configuración anterior, estamos creando una nueva instancia de la base de datos H2 y ejecutando un script schema.sql que crea las tablas e índices necesarios.

    A continuación, puedes crear tu clase de prueba:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    @AutoConfigureMockMvc
    public class MyControllerTest {
    
        @Autowired
        private MockMvc mockMvc;
    
        @Autowired
        private ObjectMapper objectMapper;
    
        @Autowired
        private MyRepository myRepository;
    
        @Test
        public void testEndpoint() throws Exception {
            // Crear algunos datos simulados
            MyEntity entity = new MyEntity();
            entity.setName("John");
            myRepository.save(entity);
    
            // Llamar al punto final y verificar la respuesta
            mockMvc.perform(get("/my/endpoint"))
                    .andExpect(status().isOk())
                    .andExpect(jsonPath("$.name", equalTo("John")));
        }
    }
    

    En la prueba anterior, estamos utilizando el framework MockMvc para llamar al punto final y verificar la respuesta. También estamos creando algunos datos simulados y guardándolos en la base de datos utilizando la clase MyRepository.

    Con la configuración anterior, la prueba utilizará la base de datos H2 en lugar de la base de datos MongoDB real. Esto te permite probar tu código y puntos finales sin realizar cambios reales en la base de datos.

Comments are closed.