我正在使用Spring Boot,Spring Data JPA和Spring Data Elasticsearch研究sample application。我希望能够将单元测试作为管道构建的一部分运行,但是当服务调用所述ES服务器时,它们需要Elasticsearch运行才能工作。 SQL工作正常,因为我使用的是内存中的H2实例。
我已经实现了一些代码来尝试将ES作为“嵌入式”服务器启动。嵌入式服务器工作正常,但似乎,至少从我所知道的,它是在上下文加载后启动的。最重要的是在ElasticSearchConfiguration
之后做了这件事。
我想我需要将AbstractElasticsearchTest中的代码重构成一个单独的类,它可以在ElasticSearchConfiguration
生成客户端/模板之前运行,但我不知道该怎么做,也不知道如何谷歌说过程。
Spring Boot中是否有一些机制可用于在运行任何配置之前启动嵌入式服务器?或者是否有某些方法可以在创建客户端/模板之前增强ElasticSearchConfiguration
来执行此操作,但仅在运行单元测试时?
编辑:所以,只是为了更具体一点......我正在寻找的是在“嵌入式”模式下运行ES 5的方法/方法或者如何模拟Spring Data ES代码以使其适用于CI服务器。目前上面链接的代码是混合单元测试和集成测试,我知道,因为它正在调用物理ES服务器。这就是我想要纠正的:我应该能够存根/模拟足够的底层Spring Data代码,以使单元测试认为它正在与真实交易相提并论。然后,我可以更改测试,确定文档是否已将其转换为ES并将类似提前搜索的内容测试为集成测试,以便在CI或Sonar运行时不运行。
好吧,对于那些可能会在未来回到这里的人,this commit展示了我为让ES作为“嵌入式”运行而做出的改变。
它的螺母和螺栓是将节点作为“本地”启动然后物理返回node.client()
。然后在获取客户端的Spring Bean方法中,检查是否已启用“嵌入”,如果是,则启动节点并返回其客户端(本地客户端),如果不是正常构建客户端。