Spring在传统的单元测试下的问题
1、需要手动的启动Spring容器。
2、没有正确的关闭Spring容器。
3、每运行一个测试用例(测试方法),相当于要重启一次Spring。
4、Junit在管理Spring(与我们的目的相反)。
推荐基于Spring的测试
- 相关jar包
test、context、expression、aop
- 注解配置
1、在测试类上标注@RunWith,且其值为SpringJunit4ClassRunner.class。
其作用:
a.告诉JUnit,测试开始时先启动Spring容器,测试完成后关闭Spring容器。
b.将当前测试类加入到Spring容器中管理
2、在测试类上标注@ContextConfiguration。
告诉Spring配置文件位置。可使用相对路径,也可使用classpath前缀。
Spring默认会去找测试类同包下,命名为【测试类名-context】格式的xml文件。
3、在容器对象上标注@Autowired。
就会自动的将Spring创建好的容器的引用,赋给容器对象。
代码演示
- 传统的测试
public class SpringTest {
private IBeanObject beanObject ;
public SpringTest(){
ClassPathResource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
beanObject = factory.getBean("beanObject",BeanObject.class);
}
@Test
public void test(){
System.out.println(beanObject);
}
}
- 基于Spring的测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class SpringTest {
private IBeanObject beanObject ;
@Autowired
private BeanFactory factory;
@Test
public void test(){
beanObject = factory.getBean("beanObject",BeanObject.class);
System.out.println(beanObject);
}
}
此时注意配置文件的命名要求。