Android单元测试(2):再来谈谈为什么
作者:网络转载 发布时间:[ 2016/6/7 14:23:19 ] 推荐标签:Android 单元测试
更好的设计
当你为自己的代码写单元测试的时候,尤其是采用TDD的方式,你会很自觉地把每个类写的比较小,功能单一,这是软件设计里面很重要的SRP原则。此外,你能把每个功能职责分配的很清楚,而不是把一堆代码都塞到一个类里面(比如Activity)。你会不自觉的更偏向于采用组合,而不是继承的方式去写代码。这些都是很好的一些代码实践。
至于为什么TDD能够改善代码的设计,网上有很多的文章去分析和论证这个结论。我看到比较印象深刻的一句话是(具体在哪看的搜不出来了):当你TDD的时候,你是从一开始,从一个代码的使用者,或者说维护者的角度,去写你的代码。这样写出来的代码,自然会有更好的设计。
更强的自信心
有单元测试来保证你的代码是对的,这对于你写代码、发布代码、重构都提供了信心保证,没有那么多的担心,从而工作起来也更快乐更开心。做人呐,重要的是开心。。。
没有时间写单元测试?
前面大概讲了讲我为什么要写单元测试,以及单元测试给我带来的好处,这些其实如果大家去google “why unit testing”,估计会得到类似的答案,然而依然会有很多人不写单元测试。如果问为什么的话,那么得到多的回答,估计是:没有时间。
那么,写单元测试真的需要很多时间吗?为什么多数真正写过单元测试的人会说,写单元测试可以节约时间呢?在这里,首先要承认两点。。。
1. 单元测试,的确是一门需要学习的技术。
不仅需要学习,而且你要学习的东西还真不少,你要学习JUnit的使用,你要学习Mokito的使用,Robolectric的使用,依赖注入的概念和使用等等等待。此外,在刚开始的时候,你的确也会遇到很多坑,现有代码的坑,Android的坑,Robolectric的坑等等。这个在安卓开发这边显得更是如此,因为Android开发环境是公认的不利用写单元测试的环境之一。你需要花一些时间去学习如何处理,或者是绕过这些坑。
2. 在一个现有的,没有单元测试的项目里面加入单元测试,会需要一段时间的调整。
一个有单元测试的项目,跟一个没有单元测试的项目相比,结构会有比较大的不同。因此刚开始,你会发现各种不顺利的情况,你需要去调整各部分的代码,让他们变的容易测试,这也是比较花时间的地方。
这种调整值得吗?我认为是值得的,因为容易测试的项目,往往意味着更灵活,更具备扩展性,这个前面已经提到过了。所以本身这件事情是一件值得做的事情,更何况,测试本身又是一件非常有价值的事情。
然而等跨过了这两道坎,单元测试还需要花很多时间吗?根据我自己的经验,我觉得其实不是这样的,因为等你熟悉了如何写单元测试以后,要对一个类、一个接口写单元测试,是很容易的一件事情。如果你发现一个类不好测,往往是因为这个类的设计是有问题的。此外,你可以慢慢的搭建自己的一套测试框架,简化一些常用的繁琐的写法,让写单元测试变得更简便快捷。再加上前面讲述的原因,总体来说,我觉得写单元测试非但不会需要跟多时间,反而会节约时间。
小结
这篇文章简单讲述了,为什么要写单元测试。其实,单元测试的必要性,看看那个知名的程序员必看书单知道了。在前20本中,所有5本讲述“如何写出更好的代码”的书,无一例外都强调单元测试的必要性。
· Code Complete
· The Pragmatic Programmer
· Refactoring: Improving the Design of Existing Code
· Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
· Working Effectively with Legacy Code by Michael C. Feathers
希望这篇文章,能让你多一点学习和实践单元测试的决心,因为这真的是非常值得拥有的一项技能,只是刚开始的时候,需要多一点点时间而已。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
iOS单元测试mocha、chai、sinon和istanbul实现百分之百的单元测试覆盖率关于单元测试的总结及思考编写更好的Java单元测试的7个技巧Android单元测试框架Robolectric3.0介绍(一)使用Kiwi单元测试总结单元测试如此重要,为什么你不知道Python单元测试??使用装饰器实现测试跳过和预期故障对Controller的单元测试写好单元测试的10个技巧单元测试的重要性Angular单元测试系列??Component、Directive、Pipe 以及ServiceAndroid单元测试的整理提升单元测试体验的利器--Mockito使用总结iOS UnitTest单元测试Vue的单元测试探索(二)
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南