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.

Excluir elasticsearchTemplate de la prueba de Spring-Boot.

Tengo una aplicación que utiliza Elasticsearch y me gustaría deshabilitar esta integración cuando estoy probando algunos controladores. ¿Cómo puedo deshabilitar el elasticsearchTemplate en una prueba de Spring-Boot?

Application.class:
@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "com.closeupinternational.comclosure.elasticsearch")
public class Application {

Repository.class:
@Repository
public interface PipelineRepository extends ElasticsearchRepository<Pipeline, String> {

Test Controller.class:

@ExtendWith(SpringExtension.class)
@EnableAutoConfiguration(exclude = {ElasticsearchDataAutoConfiguration.class,
ElasticsearchRepositoriesAutoConfiguration.class})
@WebMvcTest(ProductionCycleExecutionController.class)
@Slf4j
public class ProductionCycleExecutionControllerTest {

@Autowired
private MockMvc mvc;

@MockBean
private ProductionCycleExecutionService prodCycleExecService;

No estoy usando PipelineRepository dentro de ProductionCycleExecutionService y no quiero intentar probar el repositorio Elasticsearch en este momento.

Error:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pipelineRepository' defined in
com.closeupinternational.comclosure.elasticsearch.PipelineRepository defined in
@EnableElasticsearchRepositories declared on Application: Cannot resolve reference to bean
'elasticsearchTemplate' while setting bean property 'elasticsearchOperations'; nested exception is org.springframework.beans.factory.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para desactivar la integración de Elasticsearch en las pruebas de Spring-Boot para controladores específicos, se pueden excluir las clases ElasticsearchDataAutoConfiguration y ElasticsearchRepositoriesAutoConfiguration de la autoconfiguración mediante la anotación @EnableAutoConfiguration, como se muestra en el ejemplo de la clase de controlador de prueba proporcionada en la pregunta.

    @EnableAutoConfiguration(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class})

    Esto excluye las clases de autoconfiguración de Elasticsearch del contexto de prueba de Spring-Boot y desactiva ElasticsearchTemplate durante la prueba.

    Además, para excluir el bean ElasticsearchTemplate del contexto de prueba de Spring, puede agregar el siguiente fragmento a su clase de prueba:

    @MockBean
    private ElasticsearchTemplate elasticsearchTemplate;

    Esto creará un bean de ElasticsearchTemplate en falso que se puede usar durante la prueba en lugar del bean de ElasticsearchTemplate real.

    Al realizar una simulación del bean ElasticsearchTemplate, se puede evitar el error “Cannot resolve reference to bean ‘elasticsearchTemplate'” que podría ocurrir durante la prueba.

    Tenga en cuenta que este enfoque desactivará la integración de Elasticsearch para todos los controladores probados a través de esta clase de prueba, por lo que si necesita la integración de Elasticsearch habilitada para otros controladores, deberá crear una clase de prueba separada sin la anotación @EnableAutoConfiguration(exclude = {ElasticsearchDataAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class}).

Comments are closed.