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


前言

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

  1. java: 找不到符号
  2. 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。并使用如下代码:进行测试。

  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包下)的名字相同
在这里插入图片描述

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发生版本冲突
在这里插入图片描述
解决方案: 修改测试类的版本,使其和环境一致即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Le`soleil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值