前言:
大家好,我是良辰丫,在上一篇文章中我们学习了MyBatis简单的查询操作,今天来介绍一下Spring Boot(SSM)的一种单元测试
,有人可能会感到疑惑,框架里面还有这玩意?什么东东呀,框架里面是没有这的,但是我们简单的学习一下单元测试,可以帮助我们自己测试代码,学习单元测试可以让我们少走很多弯路,毕竟,技多不压身,哈哈,废话不多说,我们往下看! ! !
个人主页:良辰针不戳
所属专栏:javaEE进阶篇之框架学习
励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
期待大家三连,关注,点赞,收藏。
作者能力有限,可能也会出错,欢迎大家指正。
愿与君为伴,共探Java汪洋大海。
单元测试(unit testing)
是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试(这里的单元并没有明确的标准)。单元
可以是一个函数,方法,类,功能模块或者子系统. <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
我们测试的代码是上一篇文章MyBatis中的mapper层.
我们先简单的认识一下各个模块,一般都不需要更改.
此时在我们的test目录里面就会生成一个测试类.
在生成的单元测试类中加一个@SpringBootTest注解,这个注解表示该单元测试是在Spring Boot容器里面的,如果没有该注解,单元测试的好多Spring Boot的功能就不能用.
package com.example.demo.mapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
//这个注解表示该单元测试是在Spring Boot容器里面的
@SpringBootTest
class StuMapperTest {
@Test
void getStuId() {
}
}
package com.example.demo.mapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
//这个注解表示该单元测试是在Spring Boot容器里面的
@SpringBootTest
class StuMapperTest {
@Autowired
private StuMapper stuMapper;
@Test
void getStuId() {
}
}
package com.example.demo.mapper;
import com.example.demo.entity.Stu;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
//这个注解表示该单元测试是在Spring Boot容器里面的
@SpringBootTest
class StuMapperTest {
@Autowired
private StuMapper stuMapper;
@Test
void getStuId() {
Stu stu = stuMapper.getStuId(1);
System.out.println(stu);
}
}
在运行完我们的单元测试代码之后,上面的运行块变成了我们的单元测试运行块,我们要想执行我们的Spring Boot项目,需要改一下.
咱们在C语言里面就接触过断言了,但你真的了解断言嘛?
- 断言是用于对程序进行调试的,对执行结构进行一定的判断,而不是对业务流程的判断.
- 那么上述的语句怎么理解呢?我们可以把断言想象成一个if判断语句,如果满足,那么继续执行断言后面的程序 ; 如果不满足,那么抛出异常,后面的程序也将不会执行.
断言的方法表
方法名 | 作用 |
---|---|
assertEquals | 判断两个对象或者两个原始类型是否相等 |
assertNotEquals | 判断两个对象或两个原始类型是否不相等 |
assertSame | 判断两个对象引用是否指向同一个对象 |
assertNotSame | 判断两个对象引用是否指向不同的对象 |
assertTrue | 判断是否为true |
assertFalse | 判断是否为false |
assertNull | 判断对象的引用是否为null |
assertNotNull | 判断对象的引用是否不为null |
注意 :
如果断⾔失败,则后⾯的代码都不会执⾏,这是非常重要的,打击一定要记住.
package com.example.demo.mapper;
import com.example.demo.entity.Stu;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
//这个注解表示该单元测试是在Spring Boot容器里面的
@SpringBootTest
class StuMapperTest {
@Autowired
private StuMapper stuMapper;
@Test
void getStuId() {
Stu stu = stuMapper.getStuId(1);
System.out.println(stu);
//添加一个断言
Assertions.assertEquals("李四",stu.getName());
}
}
接下来,我们来看一下单元测试的运行结果.
那么,我们就明白了,预期结果和最终结果不一致的时候就不能通过单元测试.
接下来我们进行打包看一下结果.
测试单元没有通过测试的时候,打包也会失败.
接下来我们再来修改一下代码,让预期结果和最终结果相同.
package com.example.demo.mapper;
import com.example.demo.entity.Stu;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
//这个注解表示该单元测试是在Spring Boot容器里面的
@SpringBootTest
class StuMapperTest {
@Autowired
private StuMapper stuMapper;
@Test
void getStuId() {
Stu stu = stuMapper.getStuId(1);
System.out.println(stu);
Assertions.assertEquals("张三",stu.getName());
}
}
我们看一下单元测试结果,发现此时已经通过了单元测试.
那么,我们此时进行打包呢,此时我们会成功的打包我们的代码.
下面是打包的包,如果我们想要在打包的时候直接改一个名字,我们可以在pom中稍微配置一下,包成功后包名就是我们设置的包名.
在build标签中引入打包的包名,注意,一定是在build标签中.
<finalName>ssm-prohect</finalName>
在project标签中引入打包的后缀名字,默认为jar.
<packaging>jar</packaging>
接下来我们来看一下我们的打包结果,下面就是我们指定的包名以及后缀名.
后序:
- 今天我们和大家简单学习一下单元测试,后序我们更加简答的判断我们的程序是否有问题.
- 为什么我们要在mybatis中引入单元测试呢?
因为进入mybatis中,我们就正式接触我们的SSM项目了,随着知识点的深入,我们也将不断完善我们的技能.