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

今天看了一下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


版权声明:本文为a1064072510原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。