前言
在我们的开发流程中,需求调研 -> 项目立项 -> 设计产品 -> 开发 ->测试 -> 发布,测试也是非常重要的一环,只有经过严格测试的产品,才能投入使用。如果一个产品不经过测试,直接上线是有非常大的风险的,出现问题会导致公司的名誉受损,如三星的note 7 爆炸时间。今天我们跟着Joel老师一起学习一下单元测试。
软件测试
- 指的是通过手工或工具对被测对象进行测试操作
- 以此来验证实际结果与预期之间是否存在差异
- 验证软件的正确性
- 找出软件的bug
项目的研发和测试生命周期
单元测试
对软件组成单元进行的测试,其目的是检验软件基本组成单位的正确性。测试对象是软件设计的最小单元:模块,又称模块测试
单元测试好处
- 提高软件质量
- 促进代码优化
- 提升研发效率
单元测试的AIR原则
A (Automatic)自动化
能一键自动化执行,或者说是关闭我们的单元测试
I(Independent)独立性
无论各个模块,接口,对外的依赖,每个单元不要相互依赖,要达到独立性。如果相互依赖,环境就是不稳定的,测出来的也是不准确的,要求独立测试,不能相互依赖
R(Repeatable)可重复性
没有新的代码加入,要可以可重复性,后面的改造,要继续能使用
单元测试的 BCDE 原则
B:Border 边界值测试
C:Correct 正确的输入,并得到预期的结果
E:Error 证明程序有错
D:Design 与设计文档相结合
功能性测试之边界值测试
常见单元测试框架
名称 | 简介 | 备注 |
Junit | 一个开放源代码的Java测试框架,用于编写和运行可重复的测试 | Java语音中被广泛应用的框架 |
Mockito | 一个mock工具,用于模拟各种对象和组件,模拟函数返回值,模拟void类型的异常 | 模拟还没有实现的功能及比较重的对象,使单元测试更加独立 |
Spring -test | 集成各种测试框架 | |
Hamcrest | 一个测试的框架,他提供了一套通用的匹配符Mather,灵活使用这些匹配符定义的规则 | 可以更加精确的表达自己的测试思想,指定所想设定的测试条件 |
JSNassert | 一个专门用于Json 断言的工具 | |
JsUnit | JavaScript客户端(在浏览器下)的单元测试框架 | |
DBUnit | Junit的扩展,用于进行数据库的单元测试框架 | |
HttpUnit | Web应用的单元测试框架,通常用Junit结合一起使用 | |
JunitEE | JavaEE 的单元测试框架 | |
测试框架示例
Junit
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
测试类以 Test 结尾,测试方法以 test开头
可以用idea 编辑器快速生成测试类
点击类名
Alt + Enter
代码
@RunWith(SpringRunner.class)
@SpringBootTest
class ICrudServiceTest {
@Test
void listPage() {
}
@Test
void list() {
}
}
宝剑锋从磨砺出,梅花香自苦寒来。