【发布时间】:2019-02-18 18:33:24
【问题描述】:
我现在正在使用 Spring Boot、Spring Data JPA 和 Spring Data Elasticsearch 处理 sample application。我希望能够将单元测试作为管道构建的一部分运行,但它们需要 Elasticsearch 在服务调用所述 ES 服务器时运行才能工作。 SQL 工作正常,因为我使用的是内存中的 H2 实例。
我已经实现了一些代码来尝试将 ES 作为“嵌入式”服务器启动。嵌入式服务器工作得很好,但至少据我所知,它似乎是在上下文加载之后启动的。最重要的是在ElasticSearchConfiguration 之后做到了。
我认为我需要将 AbstractElasticsearchTest 中的代码重构为一个单独的类,该类可以在 ElasticSearchConfiguration 生成客户端/模板之前运行,但我不知道该怎么做,也不知道如何谷歌所说的过程。
Spring Boot 中是否有一些机制可用于在运行任何配置之前启动嵌入式服务器?或者有什么方法可以在创建客户端/模板之前增强ElasticSearchConfiguration,但仅在运行单元测试时?
编辑: 所以,只是更具体一点......我正在寻找的是一种在“嵌入式”模式下运行 ES 5 或如何模拟 Spring Data ES 代码以使其适用于 CI 的方法/方式服务器。我知道,上面链接的代码目前正在混合单元测试和集成测试,因为它目前正在调用物理 ES 服务器。这就是我要纠正的:我应该能够存根/模拟足够多的基础 Spring Data 代码,以使单元测试认为它正在与真实交易对话。然后,我可以更改确定文档是否进入 ES 的测试,并将诸如预先输入搜索之类的东西测试为集成测试,这样它们就不会在 CI 或 Sonar 运行时运行。
【问题讨论】:
-
你在做集成测试吗?您真的需要在测试用例中使用 Elastic Search 吗?
-
如果有办法模拟 ES 部分,那么我可以这样做。当我存储 Hibernate 实体时,我正在存储 ES 文档,所以如果它被存根/模拟,我不在乎
-
Elasticsearch 有一个测试框架,您可以使用它运行嵌入式 ES 节点进行测试。见这里:(elastic.co/guide/en/elasticsearch/reference/current/…)。如果您想改为模拟,那么您应该模拟用于访问 ES 的外观。如果你没有那个,那么我认为你将不得不模拟 ES 客户端。
-
@Quagaar,谢谢!我认为这看起来正是我所需要的。
标签: spring spring-boot spring-data spring-data-elasticsearch