排除Spring Boot中的BootstrapConfiguration类进行测试

问题描述 投票:0回答:1

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

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

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

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

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

同一文件中也有自动配置类

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

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

我想使用@WebMvcTest注释为Spring API控制器层编写测试。但是即使在测试中,它也会尝试连接到我不想要的zookeeper实例。我不想与外部服务进行单元测试。

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

我尝试过的很少有运气的方法。

1)我试图排除类似以下内容,但仍连接到Zookeeper

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

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

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

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

请让我知道是否需要更多信息。

java spring spring-boot apache-zookeeper spring-test
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.