背景:我这边使用SSM框架已经写好了sql和Mapper接口,现在想要通过单元测试进行验证,但是发现使用test单元测试报NullPointerException 错
解决方法:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
这里可能会出现不识别@RunWith ,@ContextConfiguration 的情况。这是因为没有对应的包依赖。添加下面的包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
这里注意:spring-test的版本要和spring-context的版本一致
- 如果还是出错那可能就是junit的版本过低导致,要提高其版本(我这错误提示是要求4.12版本以上)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
之后在测试就可以了
出错原因:
@RunWith(SpringJUnit4ClassRunner.class)作用是让测试运行于Spring测试环境
@ContextConfiguration注解表示,在整合JUnit4测试时,使用注解引入多个配置文件
通过上面两个注解我们就可以使用Spring的测试环境了,由Spring来帮助我管理bean,如果没有上面的注解,那我们就只能通过自己管理bean.
既然我们知道了原因,那我们就应该明白了,除了这一种方式可以解决问题,还有另外一种方式:在核心配置文件中配置bean,然后自己进行管理和获取:
@Test
public void test(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) context.getBean("userServiceImpl");
List<User> users = userService.allUsers();
users.forEach(System.out::println);
}
}
|