Junit 使用@RunWith和@ContextConfiguration 时候,无法从spring容器中获取bean

本文介绍了在Junit测试中遇到的问题,当使用@RunWith和@ContextConfiguration注解时,无法从Spring容器中通过@Resource注解获取bean,导致空指针异常。作者尝试了手动获取bean的方式,但寻求更高效率的解决方案。在Stack Overflow找到类似问题后,通过修改代码并使用@Autowired注解成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看了一下Junit测试的,使用了@RunWith和@ContextConfiguration写了下面这段代码,然后 一直报空指针异常。

一开始的代码

@RunWith(SpringJUnit4ClassRunner.class)  //使用junit4进行测试
@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) //加载配置文件
public class UesrDaoTest {


    @Resource
    private UserDao userDao;

    @Test
    public void test() {

        //下面注释代码  手动取  可以起作用
//       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//       UserDao userDao=(UserDao) applicationContext.getBean("userDao");

        List<User> list = userDao.findAll();
        list.forEach(user -> {
            System.out.println(user.getName()+"我成功啦  ");
        });
    }
}

UserDao 用@Resource 注解,运行后结果
在这里插入图片描述

虽然,上面手动取得代码可以完美运行,但总感觉 这样逼格不太高。

上网上搜索一番,百度无果,后来在stackoverflow看见一个类似的。
在这里插入图片描述

修改代码 试一下,完全ok

@RunWith(SpringJUnit4ClassRunner.class)  //使用junit4进行测试
@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) //加载配置文件
public class UesrDaoTest {

     //注意 这个注解
    @Autowired
    private UserDao userDao;

    @Test
    public void test() {

        //下面注释代码 可以起作用
//       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//       UserDao userDao=(UserDao) applicationContext.getBean("userDao");

        List<User> list = userDao.findAll();
        list.forEach(user -> {
            System.out.println(user.getName()+"我成功啦  ");
        });
    }
}

记得使用@RunWith和@ContextConfiguration 时候,字段要使用@Autowired

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值