Spring Boot 单元测试简单使用

127 阅读4分钟

我正在参加「掘金·启航计划」

一、什么是单元测试

单元测试,是指对软件(项目)中的最小可测试单元进行检查和验证的过程,叫单元测试。

单元测试 是开发者编写的一小段代码,用于检测被测代码的一个小功能是否正确。

执行单元测试就是为了证明某段代码的执行结果是否符合我们的预期。


最小可测试单元:方法。

每个方法都代表一个相应的功能。

\

二、单元测试的好处

  1. 可以非常简单、直观、快速的测试某一个功能是否正确。
  2. 使用单元测试可以帮我们在打包的时候,发现一些问题。因为在打包之前,所有的单元测试必须通过,否则不能打包成功。

打包的过程是从上往下执行的,可以发现,package 打包指令的上一条指令就是 test。在 test 部分,就会对所有的单元进行测试。如果所有单元测试都通过了,那么就让你打包。如果有一个单元测试没用通过,就无法打包。

  1. 使用测试单元,在测试功能的时候,可以不污染连接的数据库,也就是可以不对数据库进行任何改变的情况下,测试功能。

三、单元测试的使用

Spring Boot 项目创建时会默认单元测试框架 spring-boot-starter-test,而这个单元测试框架主要是依靠另一个著名的测试框架 JUnit 实现的,打开 pom.xml就可以看到,以下信息是 Spring Boot 自动创建的:

\

补充细节:

可以看到 test 使用了 scope标签,即为作用域的意思。

<scope>test</scope>表达的意思是,这个进行单元测试的框架,仅在测试阶段有效。

但是,如果不是出于测试阶段,这个框架就会没用效果 或者说 “消失” 了。(因为项目都测试完成,准备打包部署了,就不会用到这个框架,因此在打包的时候,就会过滤掉这个框架,不会将它和项目程序打包到 jar 包里)

单元测试的实现步骤

1. 生成单元测试类

在你需要测试的类中,鼠标右键,选择 generate

然后选择 Test

上面两张图片里的内容都不需要改,唯一需要改动的地方是 Member 这一栏的内容:

在 Member(成员)这一栏下面,显示的是 类(接口)里面所有的公开方法。

选择你要测试的方法,勾选上,点击ok。

这个时候就会自动生成一个 测试类:

这个时候,此方法是不能调用到任何单元测试的方法的。此类只生成了单元测试的框架类,具体的业务代码要自己去编写。

\

2. 添加单元测试代码

1. 添加 Spring Boot 框架测试注解:@SpringBootTest

为什么要加一个 测试注解呢?因为我们生成的测试类,是一个普通的类。

但是测试接口,却不是一个普通的接口,它是 mybatis 的接口:

\

因此,我们需要在测试类上 声明它要测试的方法,是运行在 Spring Boot 容器当中的。

所以,@SpringBootTest 注解,就是起着这样的一个声明作用,表示当前这个类中测试方法(测试单元)是运行在 Spring Boot 中的。

\

2. 添加单元测试业务逻辑

由于我们要测试 UserMapper中的 getUserById方法的功能。因此我们需要引入 UserMapper 的对象:

\

3. 开启测试

点击方法旁边的绿色小箭头就可以开启测试了:

测试完后,就可以在控制台看到对应的测试结果了:

可以看到,左边的绿色勾勾,代表测试通过:

\

注意到测试代码中,使用到了断言:

如果在方法里面使用 System.out.println()来对查询结果进行输出,但这并不是单元测试的效果!!

单元测试的效果应是 单元测试中的断言!

4. 简单的断言说明

Assertions类提供的,注意!这个类是 JUnit 提供的。

此处罗列了最常用的几个 断言

\

这就是断言的魅力!如果测试失败,它的报错信息会非常详细!

后面我们实现 增、删、改 的时候,就不需要浏览器 和 postman了。直接使用 断言,来测试即可。