【问题标题】:do not create spring bean during integration testing在集成测试期间不要创建spring bean
【发布时间】:2020-09-22 10:43:55
【问题描述】:

我有一个 Spring Config 类,我想在应用程序运行时加载它。

@Configuration
public class EventHubConfiguration {


    @Bean
    @ConfigurationProperties(...)
    public EventHubClient someClient(final String namespace,
                                     final String eventHubName,
                                     final String sasKeyName,
                                     final String sasKey) throws IOException, EventHubException {
        ConnectionStringBuilder connStr = new ConnectionStringBuilder()
                .setNamespaceName(namespace)
                .setEventHubName(eventHubName)
                .setSasKeyName(sasKeyName)
                .setSasKey(sasKey);
        return EventHubClient.createSync(connStr.toString(), Executors.newSingleThreadScheduledExecutor());
    }
}

但是,当我的集成测试运行时,如何防止它加载。例如,当我做mvn clean test 或作为我构建的一部分时。我不希望在集成测试期间创建 eventthub 客户端。

【问题讨论】:

  • 使用单独的配置文件,或首先模拟该 bean,使用 @Primary + @Bean 在测试上下文中提供另一个模拟实现,使用适合您的 @ConditionalOn(...) 变体,可能还有更多我可以使用的方法我不知道
  • 要让 DI 容器工作,您需要一个 bean,即使它只是一个测试虚拟对象。

标签: java spring spring-boot


【解决方案1】:

正如我在春季文档中看到的: https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#integration-testing

3.2.2。测试夹具的依赖注入 当 TestContext 框架加载您的应用程序上下文时,它可以选择使用依赖注入配置您的测试类的实例。这提供了一种方便的机制,可以通过使用应用程序上下文中的预配置 bean 来设置测试装置。

所以是的,你的测试类必须是一个 bean

【讨论】:

    猜你喜欢
    • 2018-11-09
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2019-07-18
    • 2023-04-10
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多