共计 2391 个字符,预计需要花费 6 分钟才能阅读完成。
程序猿如何对待自测?为什么要关注测试?怎么进行测试?本文基于相干问题进行了总结,其中很多内容来自于极客工夫专栏「程序员的测试课」。下一篇文章聚焦在集成测试的实际上。
1. 为什么写测试?
要害起因:软件开发正在变得越来越简单。测试能够让咱们在越来越简单的软件开发中可能稳步前行。
- 在编写新性能时,测试能够让咱们的代码正确性失去验证,让咱们领有一个个稳固的模块。
- 测试能够帮忙咱们在长期的过程中一直回归,让每一步走得更稳。隔离变动,逐渐编写稳固的代码。
2. 为什么程序员要写测试?
程序员的测试 VS 测试人员的测试
程序员的关注点是白盒测试,而测试人员则是黑盒测试。
程序员的出发点是实现,而测试人员的出发点是业务。作为一个程序员,咱们会把更多的工夫放在对于技术实现的思考上,咱们在发现问题上的训练强度是远远不够的。所以,人们常说,别用你的业余爱好去挑战他人吃饭的本事。
程序员每多想到一点,软件品质就能多进步一点。
测试人员并没有失去充沛的施展。只有程序员做好了本人的测试,测试人员能力从日常琐碎的验证工作中解脱进去,去做更有价值的测试。
3. 单元测试最佳实际
重点:代码和测试一起写
- 保障测试品质 :整个性能代码都写完了,再去写测试,你曾经很难记得在编写这堆代码时所有的细节了,这个时候补写的测试对晋升代码品质的帮忙曾经不是很大了。
- 工作的粒度要小 :把所有的性能写完的这个粒度切实是太大了。为一个大工作编写测试,是一件难度十分大的事,这也是很多人感觉测试难写的重要因素。
- 尽可能减少对于实现细节的束缚 :mock 时,偏向于应用宽泛一些的束缚。这在某种程度上会升高将来重构代码时带来的影响。
4. 保障本人编写的代码 100% 测试笼罩
- 要有可测试的设计 ,保障本人的代码齐全可控
- 测试和代码同步写
- 隔离难以测试的代码 :对于无奈测试到第三方代码,要用一个薄薄的隔离层将代码隔离进来,在构建脚本中将隔离层排除在外。
5. 集成测试
即使是 100% 的单元测试也不能解决所有的问题。有一个重要的起因在于,咱们在编写每个单元时都会假如这些单元彼此之间可能很好地协同,但这个假如是不是肯定成立呢?答案是不肯定。除了要保障单元的正确,咱们还要保障单元之间的合作也是正确的。 绝对于单元测试只关注单元行为,集成测试关注的多个组件协同工作的体现。
5.1 集成测试的意义
- 是为了保障组件之间合作的正确性;
- 须要利用与产品代码雷同的组件组装过程;
- 能够把曾经测试好的稳固组件当做根底。
5.2 两种集成问题及最佳实际
5.2.1 代码之间的集成
1) 抉择一条工作执行的门路,把门路上用到的组件集成到一起进行测试。
单元测试欠缺后,意味着每个组件都曾经通过了测试。所以,集成测试的重点就不再是组件之间两两协同进行测试了。
2) 将框架集成进来,做一个残缺的集成测试。
尽可能地去集成,尽可能靠近实在场景。如果咱们可能把整个框架集成起来,这些货色也就能够验证了。
3) 组件之间的集成逻辑,可不做单元测试
这部分代码实际上只是对业务逻辑做一个简略的封装,次要工作是信息的转发,这会是十分薄的一层。出于实用的思考,在这里用集成测试代替单元测试,简化测试的编写。
5.2.2 代码与内部组件的集成
1) 不能为了测试的须要而批改代码
如果真的要批改,兴许应该批改的是设计,而不仅仅是代码。业务代码中不能存在仅仅为了跑通一条测试用例而存在的非凡逻辑。
6. 测试配比模型
6.1 冰淇淋蛋卷模型
冰淇淋蛋卷的出发点就是从单个测试的覆盖面思考的,只有一些零碎测试,就足以笼罩零碎的大部分状况。当然,对于那些零碎测试无奈笼罩的场景就须要有低层的测试配合,比方,集成测试和单元测试。在冰淇淋蛋卷模型里,主力就是高层测试,低层测试只是作为高层测试的补充。
6.2 测试金字塔模型
6.3 最佳实际
新我的项目:采纳测试金字塔模型,一层一层地写测试。每实现一个性能,代码和测试总是同步写进去的,代码总是失去验证的,这样咱们就能够稳步向前。
遗留我的项目:从零碎测试动手,只有写上一些高层测试,就可能笼罩到零碎的大部分性能,可能疾速地建设起安全网,属于“投资少见效快”的做法。在有了一个安全网的底线之后,咱们还是要向测试金字塔方向后退,以单元测试作为整体的根底。
7. 写测试最佳实际
7.1 咱们测试的指标是咱们的代码,而不是内部依赖
因为其它程序库「JDK、二方库、三方库、RPC 等」造成难以测试的问题,咱们能够做一层层薄薄的封装,而后,在覆盖率查看中疏忽它。封装和疏忽,缺一不可。
7.2 编写可测试的代码
- 让本人的代码合乎软件设计准则。
编写可组合的代码。
- 不要在组件外部去创建对象,组件组装应用依赖注入。
- 结构器注入 VS 字段注入
8. 革新遗留零碎的最佳实际
遗留零碎就是那些没有测试的零碎,给遗留零碎写测试就是让一个零碎恢复正常的过程。
- 残缺地给一个遗留零碎写测试是比拟艰难的。一个实用的改良策略是,动到哪里,改哪里。
- 革新遗留零碎的要害是解耦。针对耦合重大的对象,提取办法,挪到一个封装类外面。 编写可组合的代码。
9. 单元测试、集成测试、零碎测试比照
9.1 单元测试
形容: 开发人员实现,对单元写测试,粒度尽可能小,个别是一个办法、一个类。
指标: 保障每个整机都是稳固的。
用例数: 最多
9.2 集成测试
形容: 个别是开发人员实现,将多个单元集成在一起进行测试,个别测试残缺的功能模块。个别集成 Spring 容器、内存数据库、已 Mock 的内部依赖等。
指标: 保障功能模块是稳固的。不关注模块中的整机是否稳固「这是单元测试干的活」。
用例数: 较少
9.3 零碎测试
形容: 测试人员实现,把整个零碎齐全集成起来,能够自动化执行。不关注实现细节,关注需要是否实现。
实际: 对整个利用在测试环境进行测试,不对外部依赖做 Mock。
指标: 保障残缺的业务是稳固的。实践上无需过多关注细节「单元测试、集成测试实践上做了这些,然而实际上零碎测试还是要关注细节」
用例数: 较少
10. 参考资料
- 极客工夫 – 专栏 – 程序员的测试课