为测试覆盖基于Java的Spring Context配置

时间:2014-01-20 15:25:45

标签: spring configuration config

是否有可能从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
}

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

1 个答案:

答案 0 :(得分:10)

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

@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