【发布时间】:2017-11-05 22:36:34
【问题描述】:
我能够使用 SpringBoot 1.5.3 设置并成功运行三种不同的测试配置
方法#1。使用@Import注解导入Bean
@RunWith(SpringJUnit4ClassRunner.class)
@Import({MyBean.class})
public class MyBeanTest() {
@Autowired
private MyBean myBean;
}
方法#2。使用@ContextConfiguration注解导入Bean
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MyBean.class})
public class MyBeanTest() {
@Autowired
private MyBean myBean;
}
方法#3(带有内部类配置;基于the official blog post)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class MyBeanTest() {
@Configuration
static class ContextConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@Autowired
private MyBean myBean;
}
考虑到@Import注解文档
指示一个或多个 {@link Configuration @Configuration} 类以 导入。
事实上MyBean 不是一个配置类,而是一个带有@Component 注释的bean 类,看起来方法#1 是不正确的。
来自@ContextConfiguration 文档
{@code @ContextConfiguration} 定义类级元数据,即 用于确定如何加载和配置 {@link org.springframework.context.ApplicationContext ApplicationContext} 用于集成测试。
听起来它更适用于单元测试,但仍然应该加载一种配置。
方法#1 和#2 更短更简单。 方法#3 看起来是正确的方法。
我说的对吗?是否有其他标准为什么我应该使用方法 #3,例如性能或其他?
【问题讨论】:
-
MyBean是否依赖于任何其他 bean?如果不是,我会像MyBean myBean = new MyBean();那样实例化它 -
是的,这取决于
org.springframework.core.env.Environment。
标签: spring unit-testing spring-boot