单元测试
为什么要写单元测试?
因为我是一名专业的计算机工程师
理论上单元测试带来的好处有:
- 单测成本低,速度快,编写代码更规范。
- 单测是最佳的、自动化的、可执行的文档。
- 测试的要诀是:测试你最担心出错的部分,这样你就能从测试工作中得到最大的利益,100%- -覆盖率的单测会逐渐消磨开发人员对测试的耐心和好感。
- 单测驱动设计,提升代码简洁度,确保安全重构,代码修改后,单测仍然能通过,能够增强开发者的信心。
- 快速反馈,更快的发现问题。
单元测试原则
为什么集成测试不算单元测试呢?我们可以从单元测试原则上来判断。在业界,常见的单元测试原则有AIR原则和FIRST原则。
AIR原则
AIR原则内容如下:
1、A-Automatic(自动的)
单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试。单元测试中不准使用System.out来进行人肉验证,必须使用assert来验证。
2、I-Independent(独立的)
单元测试应该保持的独立性。为了保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,也不能对外部资源有所依赖。
3、R-Repeatable(可重复的)
单元测试是可以重复执行的,不能受到外界环境的影响。单元测试通常会被放入持续集成中,每次有代码提交时单元测试都会被执行。
FIRST原则
FIRST原则内容如下:
1、F-Fast(快速的)
单元测试应该是可以快速运行的,在各种测试方法中,单元测试的运行速度是最快的,大型项目的单元测试通常应该在几分钟内运行完毕。
2、I-Independent(独立的)
单元测试应该是可以独立运行的,单元测试用例互相之间无依赖,且对外部资源也无任何依赖。
3、R-Repeatable(可重复的)
单元测试应该可以稳定重复的运行,并且每次运行的结果都是稳定可靠的。
4、S-SelfValidating(自我验证的)
单元测试应该是用例自动进行验证的,不能依赖人工验证。
5、T-Timely(及时的)
单元测试必须及时进行编写,更新和维护,以保证用例可以随着业务代码的变化动态的保障质量。
ASCII原则
阿里的夕华先生也提出了一条ASCII原则:
1、A-Automatic(自动的)
单元测试应该是全自动执行的,并且非交互式的。
2、S-SelfValidating(自我验证的)
单元测试中必须使用断言方式来进行正确性验证,而不能根据输出进行人肉验证。
3、C-Consistent(一致的)
单元测试的参数和结果是确定且一致的。
4、I-Independent(独立的)
单元测试之间不能互相调用,也不能依赖执行的先后次序。
5、I-Isolated(隔离的)
单元测试需要是隔离的,不要依赖外部资源。