是否有可能从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
}
实现这一目标的最简单方法是什么?
答案 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。