java - 在 Spring Boot 中排除 BootstrapConfiguration 类进行测试

标签 java spring spring-boot apache-zookeeper spring-test

我有一个从 Zookeeper 实例读取其配置属性的应用程序。

有一个内部 spring-boot-auto-configure 模块,可帮助从 Zookeeper 实例读取信息。

我们需要在bootstrap.properties文件中设置zookeeper实例信息。

来自自动配置模块的 spring.factories

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
  com.company.name.ZooKeeperAutoConfig

同一文件中还有 AutoConfiguration 类

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.company.name.XyzAutoConfig

因此,当应用程序启动时,它会从 bootstrap.properties 获取信息并通过自动配置模块连接到 Zookeeper 实例。

我想使用 @WebMvcTest 注释为 Spring API Controller 层编写测试。 但即使在测试中它也会尝试连接到zookeeper实例,这是我不想要的。我不希望单元测试与外部服务通信。

我想在测试期间排除 Zookeeper 引导配置。

我尝试过几种方法,但都没有成功。

1)我尝试排除如下,但它仍然连接到 Zookeeper

@TestPropertySource(properties=
{"spring.autoconfigure.exclude=com.company.name.ZooKeeperAutoConfig"})

2)我创建了 bootstrap-test.properties 并为 Zookeeper 属性添加了一些虚拟值。在测试中我添加了 @ActiveProfile("test") 。这尝试通过虚拟值连接到zookeeper,但最终失败。

有什么方法可以完全忽略/排除 Zookeeper 引导配置。应用程序不应该知道它需要连接到zookeeper才能工作。

在测试中排除 BootstrapConfiguration 是否可行?

如果需要更多信息,请告诉我。

最佳答案

作为一个想法 - 您是否尝试过在 ZooKeeper 自动配置类上添加 @Conditional 注释?

@Configuration
@ConditionalOn....
public class com.company.name.ZooKeeperAutoConfig  {
}

我无法自己检查这一点,但属性条件可能是相关的,或者如果应用程序上下文不匹配,则 org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication 应该匹配Web 应用程序上下文(但与测试相关的测试应用程序上下文)

关于java - 在 Spring Boot 中排除 BootstrapConfiguration 类进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967476/

相关文章:

java - spring-amqp读取一条rabbit消息最早的入口点是什么?

java - 如何使用 Elastic 对最后的 Null 进行排序?

java - HTTP 状态 500 - shopizer 中的请求处理失败

java - Spring Boot Data JPA Paging 以正确的方式实现

java - 将文件从 Web 应用程序写入客户端文件系统

spring-boot - 使用 String[] 作为请求主体的 Mockmvc 单元测试

java - Play 商店发布的应用程序“网络无法访问”,但调试版本有效

java - OnListItemClick 从未被调用?

java - 将资源包含在单独的 "resource"文件夹中

Java:JGraphT 的最小生成树?