Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

775
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda