文章目录
前言
本文的主要内容: 在springboot项目中,如何在test包中进行项目部分的功能测试。以及个人在做项目过程中,遇到的两个Bug:
- java: 找不到符号
- java.lang.IllegalStateException
文中分析了这两个异常为什么会出现,并提供了对应的解决方案。
本文的项目结构:
本文测试的项目,是基于maven搭建的一个springcloud项目。该项目有两个子服务,文中以user-service为例。
本文的测试单元:
在user-service服务中,其service层有一个方法findByid(Long id),该方法的功能很简单:通过id去查询数据库,并返回一个用户信息。
@Service
public class UserService {
@Autowired
UserMapper userMapper;
public User findByid(Long id){
return userMapper.findByid(id);
}
}
那么如何在test包中测试该功能是否可以执行成功呢?
1 导入与测试相关的pom依赖
<!-- springboot测试依赖-->
</dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
2 构建test测试类UserServiceTest
在test中创建对应的测试类UserServiceTest。并使用如下代码:进行测试。
- 注入UserService对象;
- 创建测试方法testFindUserById();
- 输入Long id进行测试。
public class UserServiceTest {
@Autowired
UserService userService;
@Test
public void testFindUserById(){
User byid = userService.findByid(1L);
System.out.println(byid);
}
}
3 导入@RunWith和@SpringBootTest
@RunWith(SpringRunner.class)
@SpringBootTest(classes = UserApplication.class)
在测试类的上方加入,结果如下:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = UserApplication.class)
public class UserServiceTest {
@Autowired
UserService userService;
@Test
public void testFindUserById(){
User byid = userService.findByid(1L);
System.out.println(byid);
}
}
4 测试结果
成功执行
5 Bug分析
Bug1:java找不到符号
问题分析: 测试类UserService(main包下)和被测试类UserService(test包下)的名字相同。
public class UserService {
@Autowired
UserService userService;
@Test
public void testFindUserById(){
User byid = userService.findByid(1L);
System.out.println(byid);
}
}
从报错信息可以看出,注入的对象:为test中的UserService对象。
解决方案: 修改测试类中的类名称,与测试的类名称不相同即可。
Bug2:java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
问题分析:
在pom中,导入spring-test时,自动选择的版本和当前环境版本不一致。
在External Libraries中也可以看出。5.3.29与5.2.13发生版本冲突。
解决方案: 修改测试类的版本,使其和环境一致即可。