【问题标题】:exclude BootstrapConfiguration classes in spring boot for tests在 Spring Boot 中排除 BootstrapConfiguration 类以进行测试
【发布时间】:2020-05-14 23:22:15
【问题描述】:

我有一个从 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 中获取信息并通过 auto-configure-module 连接到 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】:

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

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

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

    p>

    【讨论】:

    • 我无权访问 ZooKeeperAutoConfig 代码。它作为 pom.xml 中的 jar 的依赖项
    • 对不起,我现在很困惑,您在问题“有一个内部 spring-boot-auto-configure 模块...”中说过,然后您提到了(正如我假设)您的公司com.company.name.ZooKeeperAutoConfig。它是在您的组织中开发的 jar 还是您正在使用一些外部开发的解决方案?例如,如果它的 spring cloud (github.com/spring-cloud/spring-cloud-zookeeper/blob/master/…) 那么它有一个属性spring.cloud.zookeeper.enabled
    猜你喜欢
    • 2019-12-23
    • 2020-07-19
    • 2014-12-29
    • 2018-11-02
    • 2022-01-08
    • 2018-03-21
    • 1970-01-01
    • 2019-08-23
    • 2018-12-26
    相关资源
    最近更新 更多