Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

767
Vistas
Arranque de resorte: no se puede burlar de MongoTemplate

Tengo un método en un servicio que quiero probar y que usa MongoTemplate de la siguiente manera:

 @Service public class MongoUpdateUtilityImpl implements MongoUpdateUtility { private final MongoTemplate mongoTemplate; @Autowired MongoUpdateUtilityImpl (final MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } @Override public Object update(final String id, final Map<String, Object> fields, final Class<?> classType) { ... this.mongoTemplate.updateFirst(query, update, classType); return this.mongoTemplate.findById(id, classType); } }

Luego estoy tratando de probar este método con métodos simulados para la plantilla de mongo:

 @SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("test") public class MongoUpdateUtilityTest { @MockBean private MongoTemplate mongoTemplate; @Autowired private MongoUpdateUtility mongoUpdateUtility; /** * Test en el que se realiza una actualización correctamente. */ @Test public void updateOK1() { final Map<String, Object> map = new HashMap<>(); map.put("test", null); map.put("test2", "value"); when(mongoTemplate.updateFirst(Mockito.any(Query.class), Mockito.any(Update.class), Mockito.any(Class.class))) .thenReturn(null); when(mongoTemplate.findById(Mockito.anyString(), Mockito.any(Class.class))).thenReturn(null); assertNull(this.mongoUpdateUtility.update("2", map, Map.class)); } }

He leído esta pregunta, pero cuando pruebo la respuesta marcada como solución, dice que MongoTemplate no se puede inicializar. Preferiría burlarme de esto que usar una base de datos integrada, ya que estoy limitado en las bibliotecas que puedo usar.

Mi error:

 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'operacionesPendientesRepository' defined in es.santander.gdopen.operpdtes.repository.OperacionesPendientesRepository defined in @EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.NullPointerException
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Está utilizando @SpringBootTest, que muestra todo el contexto de la aplicación. Esto significa que se inicializarán todos los beans definidos en su aplicación.

Esta es una exageración para una prueba de un @Service:

  • su prueba tardará más en ejecutarse
  • todo el contexto debe ser correcto

Para una prueba de un @Service, le aconsejo que adopte un enfoque más simple y pruebe el servicio de forma aislada.

  • use la extensión / corredor de Mockito (según la versión de junit)
  • deshacerse de @SpringBootTest, @ActiveProfiles y SpringRunner
  • use @Mock en lugar de @MockBean
  • use @InjectMocks en lugar de @Autowired
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda