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):这个注解表示的是,启动一个单元测试类
通常情况下,以上两个注解是放在一起使用的,并且一个好的编程习惯就是,每写完一层代码,都应该像这样做测试,保证每一层都能够正常运行,不要等到最后做到了控制层,最后测不通又找不到原因