什么是单元测试?
对软件中的最小可测试单元进行测试
对组成项目的方法进行一个一个测试
组成软件功能和系统的方法是否达到预期目标。
为什么要用单元测试
- 分模块开发,方便的定位到哪个单元出了问题。(单个模块,单个处理,对每一个模块都进行测试)
- 保证了代码质量 (减少问题发生的概率)
- 驱动开发(测试先行)
单元测试的两种类型
1:TDD
测试驱动开发,从需求角度看。 即我需要的结果是什么,如果不是就是错误的。
执行步骤:
需求分析> 编写单元测试>编写代码使单元测试通过 > 重构
2: BDD
行为驱动开发,从具体功能角度出发。即看结果是什么,如果不是什么就是出错
执行步骤:
从业务角度定义目标> 找到实现目标到的方式> 编写单元测试> 实现行为> 检查产品
测试原则
- 及时修改和维护(随着需求和业务的变动而改变测试代码)
- Code Review (审查代码是否实现所预期,逻辑是否正确。代码是否简单易懂。是否符合团队规范。)(Code Review延伸:同步code review: 即写完代码后立即进行代码审查; 异步code review: 借助工具进行代码审查; 偶尔code review: 会议式的代码审查)
- 只测单一的点(例如屏蔽掉一个方法中的其他方法的调用)
- 尽量贴近真实
- 避免测试中逻辑过于复杂
单元测试的核心内容
- 测试框架 (运行执行方法)
- 断言库(查看检查结果)
- Mock库(屏蔽外部依赖)
- Test runner
- 覆盖率工具(测试代码覆盖了多少行,多少方法,)
常见的测试框架
- Jest——基于jasmine, 自带assert和mock,对react友好。(全部集成)
- Jasmine——bdd风格,自带assert和mock
- Mocha——全面适合node和浏览器两个端(不带断言和mock)(自由搭配)
- Qunit——出自jquery,后来独立出来
常见的断言库
Chai——支持所有风格-(比较全面)(占据市场份额60%+)
Should——
expect
Assert——node环境直接使用
Mock库
sinon
Test runner
karma
覆盖率工具
istanbul(伊斯坦布尔)
应用场景
1.vue初始化一个项目时的选项