1. 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在Java中单元测试的最小单元是类。
2. 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。执行单元测试,就是为了证明这 段代码的行为和我们期望是否一致。
单元测试引用:
1. 众所周知,通过spring initialize创建的Spring Boot项目会在Maven中自动携带很多starter依赖:
其中包含了一个名为spring-boot-starter-test的依赖,本文是围绕这个依赖展开。
2. Spring Boot中引入单元测试很简单,添加如下依赖(即spring-boot-starter-test依赖):
3. spring-boot-starter-test有如下几个库:
spring-boot-starter-testUML图:
在没有接触单元测试之前我们是怎么做测试的?一般有两个方法:
写单元测试的两个动机:
1. 什么是Mock?
在面向对象的程序设计中,模拟对象(英语:mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模拟一些输入数据,来验证程序是否达到预期结果。
2. 为什么使用Mock对象?
使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。
3. MockMvc的概念
MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。
接口MockMvcBuilder,提供一个唯一的build方法,用来构造MockMvc。主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder。
4. MockMVC的基本步骤
第一步:Spring Boot中单元测试类写在src/test/java目录下,你可以手动创建具体测试类,也可以通过IDEA自动创建测试类,如下图:(注:点选并打开相应代码界面,再点击菜单栏的Navigate)
第二步:按照第一步的方法,点击测试后,出现图一的对话框(如果想要测试的类已经存在测试类了会被列出来,也可以重新创建一个新的测试类),点击”Create New Test…”会弹出图二的对话框,可以选择是否生成setUp以及要测试的成员方法等:
图一
图二
第三步:至此Service层的测试类就创建好了,测试类自动生成到了src/test/java目录下项目的同级目录中,如下图:
Service层测试代码如下:
注解解释:
创建测试类步骤见第四部分,此处略。
Controller层部分的代码将分为三个代码块讲解,里面有看不懂的代码先不要着急哦?,会在第五部分结尾处给大家汇总解答的,大家要坚持看到最后哟!?
代码块一:
注解解释:@SpringBootTest>:获取启动类,加载配置,寻找主配置启动类(被 @SpringBootApplication 注解的)
注解解释:@Transactional:开启事务功能
@Rollback(): 事务回滚,默认是true代码块三:
/get运行结果如下:
现在将上面的一些琐碎的知识点汇总一下:
JUnit 4.4 结合 Hamcrest 提供了一个全新的断言语法——assertThat。程序员可以只使用 assertThat 一个断言语句,结合 Hamcrest 提供的匹配符,就可以表达全部的测试思想。
assertThat 的优点:优点 1:以前 JUnit 提供了很多的 assertion 语句,如:assertEquals,assertNotSame,assertFalse,assertTrue,assertNotNull,assertNull 等,现在有了 JUnit 4.4,一条 assertThat 即可以替代所有的 assertion 语句,这样可以在所有的单元测试中只使用一个断言方法,使得编写测试用例变得简单,代码风格变得统一,测试代码也更容易维护。
优点 2:assertThat 使用了 Hamcrest 的 Matcher 匹配符,用户可以使用匹配符规定的匹配准则精确的指定一些想设定满足的条件,具有很强的易读性,而且使用起来更加灵活。优点 3:assertThat 不再像 assertEquals 那样,使用比较难懂的“谓宾主”语法模式(如:assertEquals(3, x);),相反,assertThat 使用了类似于“主谓宾”的易读语法模式(如:assertThat(x,is(3));),使得代码更加直观、易读。
assertThat 的基本语法如下:
value :接下来想要测试的变量值; matcher statement :使用 Hamcrest 匹配符来表达的对前面变量所期望的值的声明,如果 value 值与 matcher statement 所表达的期望值相符,则测试成功,否则测试失败。
Postman是一款功能强大的网页调试与发送网页HTTP请求的工具。Postman能够发送任何类型的HTTP请求(GET, HEAD, POST,PUT..),附带任何数量的参数和HTTP headers。支持不同的认证机制(basic, digest,OAuth),接收到的响应语法高亮(HTML,JSON或XML)。安装Postman
安装后,Postman是介样婶儿滴~~?
详细的使用方法,在这里帮大家找到了一篇保姆级Postman使用教程: