Java学习笔记-TestNG + Spring遇到的问题

在单元测试时,需要注入bean去进行测试,但是报空指针java.lang.NullPointerException。

这是因为类没有继承AbstractTestNGSpringContextTests类,导致没有注入实例的能力。

AbstractTestNGSpringContextTests这个类的作用:测试类只有继承了该类才拥有注入实例的能力。

@SpringBootTest
@Slf4j
public class TransferTest extends AbstractTestNGSpringContextTests {
    @Autowired
    public StudentService studentService;
    
    @Test
    public void testStudent(){
        log.info("测试用例开始执行");
        studentService.play();
        Student student=new Student();
        student.setName("小周");
        student.setAge(12);
        System.out.println(student.getAge());
    }
}

 

接着执行,但新的问题又来了

问题是说,StudentService这个bean没有装配成功,啥都不说了,注解都加了,到底是啥原因呢?百度吧。

找到了下面这句话,仔细体会下(画重点,必考!)

根据上面说的,那就好解决了,要么把service和dao放在可扫描的包下,要么在@SpringBootApplication注解后加入扫描包的范围,比如下面这种(忽略包名的命名)

@SpringBootApplication(scanBasePackages = {"com.test.dto"})

再次执行,完美运行。

 

@SpringBootTest

一般情况下,使用@SpringBootTest后,Spring将加载所有被管理的bean,基本等同于启动了整个服务,此时便可以开始功能测试。

将SpringBoot主类中导入的bean全都包含进来,SpringBoot主类中的bean就是你标记的@SpringBootApplication的类中有哪些bean

 

@MybatisTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

使用@MybatisTest,如果不加注解@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE),那么mybatis使用的是内存数据库,并不是真实的tddl的数据库,会报表不存在的错

其实上面也提到了,如果使用@SpringBootTest时,会启动整个服务,这样太耗时了,如果我们只是想测试某个类呢?那就用@MybatisTest

 

 

@ContextConfiguration

这个注解如果()内有class文件,会优先扫描带有class文件中的bean,不然扫描@Configuration的类,最后扫描@SpringBootApplication

@ContextConfiguration这个注解通常与@RunWith(SpringJUnit4ClassRunner.class)联合使用用来测试

当一个类添加了注解@Component,那么他就自动变成了一个bean,就不需要再Spring配置文件中显示的配置了。把这些bean收集起来通常有两种方式,Java的方式和XML的方式。当这些bean收集起来之后,当我们想要在某个测试类使用@Autowired注解来引入这些收集起来的bean时,只需要给这个测试类添加@ContextConfiguration注解来标注我们想要导入这个测试类的某些bean。

可参考这个链接:https://www.cnblogs.com/bihanghang/p/10023759.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值