Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

763
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!