在上下文加载到Spring Boot中进行测试之前启动嵌入式服务器

时间:2018-09-14 00:55:51

标签: spring spring-boot spring-data spring-data-elasticsearch

我现在正在使用Spring Boot,Spring Data JPA和Spring Data Elasticsearch开发sample application。我希望能够将单元测试作为管道构建的一部分来运行,但是当该服务调用所述ES服务器时,它们要求Elasticsearch能够运行。 SQL工作正常,因为我正在使用内存中的H2实例。

我已经实现了一些代码来尝试将ES作为“嵌入式”服务器启动。嵌入式服务器工作得很好,但是至少从我看来,它似乎是在上下文加载之后启动的。最重要的是,ElasticSearchConfiguration之后就是了。

我认为我需要将代码从AbstractElasticsearchTest中重构为一个单独的类,该类可以在ElasticSearchConfiguration生成客户端/模板之前运行,但是我不确定该怎么做,也不确定Google怎样说这个过程。

Spring Boot中是否有某种机制可用于在运行任何配置之前启动嵌入式服务器?还是有某种方法可以增强ElasticSearchConfiguration以便在创建客户端/模板之前(但仅在运行单元测试时)做到这一点?

编辑: 因此,更具体一点...我正在寻找的是一种以“嵌入式”模式运行ES 5或如何充分模拟Spring Data ES代码以使其可用于CI的方法/方式。服务器。我知道,上面链接的代码当前将单元测试与集成测试混合在一起,因为它当前正在对物理ES服务器进行调用。那就是我要纠正的问题:我应该能够对足够的基础Spring Data代码进行存根/模拟,以使单元测试认为它正在与真实交易对话。然后,我可以更改确定文档是否进入ES的测试,并将诸如预输入搜索之类的东西测试为集成测试,这样它们就不会在CI或Sonar运行时运行。

1 个答案:

答案 0 :(得分:0)

好,对于将来可能会回到这里的用户,this commit显示了我为使ES以“嵌入式”运行而进行的更改。

它的基本要点是将节点启动为“本地”,然后物理返回node.client()。然后在获取客户端的Spring Bean方法中,检查是否已打开“嵌入式”功能,如果启动了该节点,则返回其客户端(本地的),如果不是像平常一样构建客户端。