package com.sia.test01;

import com.sia.dao.MemberDao;
import com.sia.model.MemberModel;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

public class MemberDaoTests {
    @Autowired
    private MemberDao dao;
    @Test
    public void testMemberDao(){
        MemberModel memberModel = dao.selectMemberById(1);
        System.out.println(memberModel);
    }
}

上述代码就是今天在写springboot的时候,在使用test测试mapper层的接口的时候,总是出现空指针,一开始是在mapper层的接口上面没有添加自动装配的注解:
顺便扩展一下学过得知识,同时也是面试题:

  • @Resource
    • 这个注解是jdk中的注解,需要导包,默认是按byName的方式进行注入的
  • @Autowired
    • 这个注解是springboot提供的注解,默认是按byType的方式进行注入的,被该注解修饰的bean对象一定要包含在ioc容器中,如果没有,需要加上required=false,这样的一个属性,表示忽略当前要注入的bean,如果有直接注入,没有则跳过,不会报错

怎样解决这个问题呢?

我翻看了原来的代码,发现要保证test方法能够正常执行,需要在测试类的上面加上两个注解

@SpringBootTest
@RunWith(SpringRunner.class)
public class MemberDaoTests {
    @Autowired
    private MemberDao dao;
    @Test
    public void testMemberDao(){
        MemberModel memberModel = dao.selectMemberById(1);
        System.out.println(memberModel);
    }
}

上面这两个注解是什么意思呢?有什么作用呢?

  • @SpringBootTest:这个注解表示该类是SpringBoot的测试类
  • @RunWith(SpringRunner.class):这个注解表示的是,启动一个单元测试类

通常情况下,以上两个注解是放在一起使用的,并且一个好的编程习惯就是,每写完一层代码,都应该像这样做测试,保证每一层都能够正常运行,不要等到最后做到了控制层,最后测不通又找不到原因

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐