单元测试有很多好处, 比如:
- 提高信心,适应变化和迭代. 如果现有代码有较为完善的单元测试,在代码重构时,可以检验模块是否依然可以工作, 一旦变更导致错误,单元测试也可以帮助我们快速定位并修复错误
- 单元测试是集成测试的基础
- 测试即文档。如果文档不能解决你的问题,在你打算看源码之前,可以查看单元测试。通过这些测试用例,开发人员可以直观地理解程序单元的基础API
- 提升代码质量。易于测试的代码,一般都是好代码
测什么?
业务代码或业务组件是比较难以实施单元测试的,一方面它们比较多变、另一方面很多团队很少有精力维护这部分单元测试。所以通常只要求对一些基础/底层的组件、框架或者服务进行测试, 视情况考虑是否要测试业务代码
测试的准则:
- 推荐Petroware的Unit Testing Guidelines, 总结了27条单元测试准则,非常受用.
单元测试指标:
一般使用测试覆盖率
来量化,尽管对于覆盖率能不能衡量单元测试的有效性存在较多争议。
大部分情况下还是推荐尽可能提高覆盖率, 比如要求语句覆盖率达到70%;核心模块的语句覆盖率和分支覆盖率都要达到100%
. 视团队情况而定
扩展:
- 测试覆盖(率)到底有什么用?
相关工具
- Headless Browsers: 无头浏览器是网页自动化的重要运行环境。 常用于功能测试、单元测试、网络爬虫
- puppeteer
- Headless Chromium
- 测试框架
- Jest Facebook的单元测试框架. 零配置, 支持组件快照测试、模块Mock、Spy. 一般场景, 单元测试学它一个就行了
- 组件测试
- testing-library
- Enzyme
- 组件测试
- Intern
- Jest Facebook的单元测试框架. 零配置, 支持组件快照测试、模块Mock、Spy. 一般场景, 单元测试学它一个就行了
- 单元测试
- AVA
- Jasmine
- Mocha
- Tape
- 断言库
- Chai
- expect.js
- should.js
- Mock/Stubs/Spies
- sinon.js
- 代码覆盖率
- istanbul
- 基准测试
- benchmark.js
- jsperf.com