如何在springboot项目中进行的test测试,以及出现(1)java: 找不到符号和(2)java.lang.IllegalStateException的解决方案

文章目录

  • 前言
  • 1 导入与测试相关的pom依赖
  • 2 构建test测试类UserServiceTest
  • 3 导入@RunWith和@SpringBootTest
  • 4 测试结果
  • 5 Bug分析
    • Bug1:java找不到符号
    • Bug2:java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]


前言

本文的主要内容: 在springboot项目中,如何在test包中进行项目部分的功能测试。以及个人在做项目过程中,遇到的两个Bug:

  1. java: 找不到符号
  2. java.lang.IllegalStateException

文中分析了这两个异常为什么会出现,并提供了对应的解决方案。
本文的项目结构:
如何在springboot项目中进行的test测试,以及出现(1)java: 找不到符号和(2)java.lang.IllegalStateException的解决方案_第1张图片
本文测试的项目,是基于maven搭建的一个springcloud项目。该项目有两个子服务,文中以user-service为例。
本文的测试单元:
如何在springboot项目中进行的test测试,以及出现(1)java: 找不到符号和(2)java.lang.IllegalStateException的解决方案_第2张图片
在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

如何在springboot项目中进行的test测试,以及出现(1)java: 找不到符号和(2)java.lang.IllegalStateException的解决方案_第3张图片
在test中创建对应的测试类UserServiceTest。并使用如下代码:进行测试。

  1. 注入UserService对象;
  2. 创建测试方法testFindUserById();
  3. 输入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包下)的名字相同
如何在springboot项目中进行的test测试,以及出现(1)java: 找不到符号和(2)java.lang.IllegalStateException的解决方案_第4张图片

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时,自动选择的版本和当前环境版本不一致
如何在springboot项目中进行的test测试,以及出现(1)java: 找不到符号和(2)java.lang.IllegalStateException的解决方案_第5张图片
在External Libraries中也可以看出。5.3.29与5.2.13发生版本冲突
如何在springboot项目中进行的test测试,以及出现(1)java: 找不到符号和(2)java.lang.IllegalStateException的解决方案_第6张图片
解决方案: 修改测试类的版本,使其和环境一致即可。

你可能感兴趣的:(SpringCloud,java,spring,boot,后端)