我们的单元测试代码中
为什么明明我们使用注解注入了成员变量,但是运行后还是显示空指针异常呢?
首先我们要明白应用程序的入口时main方法,那为什么junit单元测试中没有main方法也能执行呢?
因为junit中集成了一个main方法,该方法可以判断当前测试类中有拿写方法有@Test注解,junit就会让有@Test注解的方法执行
而junit是不会管我们是否采用了spring的,所以在执行代码时也就不会为我们读取配置文件或者配置类来创建spring的核心容器了
这就是为什么我们使用了注解注入成员变量但显示空指针异常的原因了,因为junit根本就没有帮我们创建ioc核心容器对象
那我们如何解决这个问题呢?
Spring整合junit的配置的解决方案
1、导入spring整合junit的jar坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
2、使用junit提供的@Runwith
注解把原有的main方法替换,替换成spring提供的
3、使用@ContextConfiguration
注解来告知spring的运行器,spring的ioc创建是基于xml还是基于注解,并且说明位置
该注解中有这么多属性
- locations:指定xml文件的位置,加上classpath关键字,表示在类路径下
- classes:指定注解类所在的位置
这里需要注意:
当我们使用spring 5.x版本时,要求junit的jar必须是4.12及以上才可以,不然会报错
它报错报的都是一些初始化不了之类的错误,并且提醒我们使用更高版本的junit