一、概念
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
二、目的
- 首先保证代码质量;
- 其次保证代码的可维护;
- 再此保证代码的可扩展。
三、Springboot的单元测试开发中遇到的问题以及解决方案描述
问题一:访问到权限修饰符为protected的成员变量。
解决方案:单元测试的类,继承AbstractTestNGSpringContextTests
原理:对集成了Spring TestContext Framework与TestNG环境中的ApplicationContext测试支持的基础测试类进行了抽象。当你继承AbstractTestNGSpringContextTests时,就可以访问到下列protected的成员变量:applicationContext:使用它进行显式的bean查找或 者测试整个上下文的状态
问题二:屏蔽环境依赖,线下模拟环境进行单元测试的开发
解决方案:利用mock。
原理:单元测试的过程为设置测试数据,设定预期结果,验证结果。mock就是创建某类型的虚拟对象,进行模拟操作。
Mockito 是一个流行 mock 框架,可以和JUnit结合起来使用。Mockito 允许你创建和配置 mock 对象。使用Mockito可以明显的简化对外部依赖的测试类的开发。
一般使用 Mockito 需要执行下面三步
-
模拟并替换测试代码中外部依赖。
-
执行测试代码
-
验证测试代码是否被正确的执行
使用步骤:
1.pom.xml中添加
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!--表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
2.Springboot中Mockito的使用
2.1)通过 @mock 注解创建 mock 对象
2.2)配置某个方法的返回值的时候,Mockito 提供了链式的 API 来实现。
when(….).thenReturn(….)
可以被用来定义当条件满足时函数的返回值。
如果需要定义多个返回值,可以多次定义。当多次调用函数的时候,Mockito 会根据定义的先后顺序来返回返回值。
Mocks 还可以根据传入参数的不同来定义不同的返回值。譬如说你的函数可以将anyString
或者 anyInt
作为输入参数,然后定义其特定的放回值。
2.3)使用 @InjectMocks 在 Mockito 中进行依赖注入
2.4)Junit单元测试中Assert断言的使用 网址:https://blog.csdn.net/qq_36688143/article/details/86305807
3.springboot中H2的使用
pom.xml中的配置。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2database.version}</version>
<scope>test</scope>
</dependency>