【问题标题】:Overwrite Java based Spring Context Configuration for Tests为测试覆盖基于 Java 的 Spring 上下文配置
【发布时间】:2014-01-20 15:25:45
【问题描述】:

是否有可能为一个或多个集成测试替换 Spring 配置中的单个 bean 或值?

就我而言,我有配置

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"foo.bar"})
public class MyIntegrationTestConfig {
    // everything done by component scan
}

用于我的集成测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class)
public class MyIntegrationTest {
    // do the tests
}

现在我想要进行第二组集成测试,用不同的 bean 替换一个 bean。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class)
public class MySpecialIntegrationTest {
    // influence the context configuration such that a bean different from the primary is loaded

    // do the tests using the 'overwritten' bean
}

实现这一目标的最简单方法是什么?

【问题讨论】:

    标签: spring configuration config


    【解决方案1】:

    Spring 测试框架能够理解扩展而不是配置。这意味着你只需要从MyIntegrationTest扩展MySpecialIntegrationTest

    @ContextConfiguration(classes = MySpecialIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class)
    public class MySpecialIntegrationTest extends MyIntegrationTest {
    
      @Configuration
      public static class MySpecialIntegrationTestConfig {
        @Bean
        public MyBean theBean() {}
      }
    
    }
    

    并创建必要的 Java Config 类并将其提供给@ContextConfiguration。 Spring 将加载基础测试用例并将其扩展为您专门研究扩展测试用例的测试用例。

    请参阅official documentation 进行进一步讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2017-02-05
      • 1970-01-01
      • 2019-04-11
      • 2014-09-25
      • 2012-02-01
      相关资源
      最近更新 更多