在我的代码中,我不想加载XXApplicationConfig类中定义的所有bean。
XXApplicationConfig是一个@Configuration带注释的文件,它定义了一堆spring bean。
所以,我想在测试时只从XXApplicationConfig类加载AppBean,以减少加载测试时间,并区分我正在测试的内容。我还想使用XXApplicationConfig类加载该类,以确保定义的bean配置也是正确的。
这是我测试AppBean类的Test类(已修改)。
您是否可以告诉我这是否是正确的做法并建议如何让它变得更好?目前,这种方法似乎有效。但是,不确定它是否是接近它的正确方法。
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class ApplicationTest {
@Configuration
@PropertySources(value = {@PropertySource("classpath:test.properties")})
static class MyTestConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public XXApplicationConfig xxAppConfig() {
return new XXApplicationConfig();
}
@Bean
public CustomTestService customTestService() {
return new CustomTestService();
}
@Bean
public AppBean appBean() throws Exception {
return XXApplicationConfig().appBean();
}
}
@Autowired
private AppBean appBean;
@Test
public void testAppBean() {
test appBean.doSomething();
}
}
答案 0 :(得分:0)
如果只想测试一个对象,只需使用该类的构造函数创建该类的一个对象。 Spring bean被设计为POJO。 Spring上下文只是创建和连接对象的便捷方式。没有什么可以阻止你自己创建和连接它们。
答案 1 :(得分:0)
如果您可以实例化要测试的类并通过构造函数和/或setter getter手动注入所需的所有依赖项,那么您就不需要在测试中使用Spring。
但是,如果你的bean:
@Autowired
或@Value
的私有字段,但没有相应的getter / setter。@Transactional
或@Cacheable
)。然后你需要Spring连接bean。我个人更喜欢为这些案例定义一个最小@Configuration
类。
然后,如果您的bean符合列表中的条件,您应该考虑重构bean以最小化其依赖性并促进测试。