解决SpringBoot单元测试@Autowired不生效问题

在学习redis的过程中,使用了spring提供的单元测试功能,但是出现了@Autowired不注入的问题,本篇博客主要说明了该问题出现的原因以及解决方法。

初始代码如下:

public class RedisTest01 {
    private static final Logger log = LoggerFactory.getLogger(RedisTest01.class);
    //redis模板组件
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @Test
    public void test1(){
        log.info("---字符串测试---");
        final String key = "SpringBootRedis:Order:10011";
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set(key,"10011");
    }
}

运行后结果:
在这里插入图片描述
在IDEA的报错中显示了空指针的异常,原因是redisTemplate是一个空指针,但是在redisTemplate上不是已经标注了@Autowired的注解了吗?
通过观察,我发现我没有标注这个测试类,spring无法知道我这个类是什么类,所以其实@Autowired是不生效的。

解决方法:

在类上添加注解

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MainApplication.class)

@runWith注解作用:
– @RunWith就是一个运行器
– @RunWith(JUnit4.class)就是指用JUnit4来运行
– @RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环 境,以便在测试开始的时候自动创建Spring的应用上下文
– @RunWith(Suite.class)的话就是一套测试集合

SpringTest与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而SpringBootTest 是在SpringTest之上的再次封装,增加了切片测试,增强了mock能力。

综上:
springboot测试步骤
直接在测试类上面加上如下2个注解@RunWith(SpringRunner.class)@SpringBootTest就能取到spring中的容器的实例,如果配置了@Autowired那么就自动将对象注入。
再次运行,程序正常执行后结束。
在这里插入图片描述

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值