我真的会写UnitTest吗?
目录
引子
大家好,我是以卖码为生的海门。上周和中仁聊到了 Test Double,可是对于那几个概念依然不是很清晰。于是对自己进行了灵魂拷问:我真的会写UnitTest吗?这其实包含两个意思:一个是会为业务代码写UnitTest,另一个是知道该怎么写UnitTest。最终,我被自己问住了。
查资料
通过查看并回顾相关资料,我暂时了解了以下概念:
- 什么是测试?- 对代码功能的正确性验证
- 为什么要测试?- 解决各种“灵异”事件(神出鬼没的BUG),保证代码质量,更好的还原需求,最重要的是要测交付价值 不写无用的测试
- 有哪些测试?- 单元测试、集成测试、性能测试等
- 单元测试中的一个单元指的是什么?- 书面说明是最小可测试单元。我认为可以是一个函数或者一个类。期待大家的答案
- 单元测试有几种常用方法论?- TDD、BDD <方法论不重要,重要的是使用方法论的人>
- TDD:侧重点偏向开发,通过 Test Case 来提高代码的质量和设计
- BDD:由外到内的开发方式,先定义业务成果,再实现这些业务成果,最后转化为验收标准
- TDD 步骤(三角法)
- 伪代码
- 真代码
- 重构代码
- TDD 思想 - 测试先行,小步迭代,重构和持续反馈
- 写好单元测试的原则 - F.I.R.S.T
- Fast - 测试必须快速
- Independent - 测试独立,如测试结果不依赖环境或运行顺序
- Repeatable - 可重复执行的纯函数
- Self-validating - 自动化校验
- Thorough and Timely - 尽量覆盖全部场景
- 如何覆盖全部场景?- 自补白盒测试
- 每个测试三段论
- 准备数据 - Given
- 执行待测函数 - When
- 断言结果 - Then
- Test Double 有哪些?- 针对这个,我还是有些概论比较模糊,期待大家的答案
- Dummy
- Fake
- Stub
- Mock
- Spy
结语
为了写好一个单元测试,需要知道和理解的不仅仅是上边那些,比如还需要有识别代码中坏味道的能力,好的代码书写习惯,准确快速的盲打手法,快捷键的使用等等。接下来,我将边学习边分享的方式与大家一道,最终一同到达我真的会写 Unit Test 的目的。