一个开发眼中的单元测试
一、前言
单元测试在我刚接触java不久就知道了这个词,后来学习了junit,接触了TDD(测试驱动开发),但直到去年毕业进公司后才正式把单元测试当成一个日常的任务,这漫长的一段时间内,我以为单元测试仅仅是一个保证代码质量的工具,然而最近我的看法变了,单元测试还有这样的用处。今天来谈谈至今为止我眼中的单元测试两方面用处。
二、保证代码质量
如果说重构改善代码的设计,那么单元测试保证了代码行为,前者是提升代码质量,后者保证了代码质量。所以很多公司都把单元测试的成功率,覆盖率当成一项指标,甚至是kpi。就算有时候会因为所谓指标而刻意追求比率,但不可否认单元测试仍是开发用来保证质量和效率的最基本的方式之一。在方法和类级别,这是最好的测试方式。
三、单元测试即文档
最近接触了两个技术点,一个是mybatis3,另外一个是FastDFS,在学习使用及阅读源码的过程中,我发现了单元测试的另外一个好处,单元测试是最好的文档,比起干巴巴的javadoc和用户手册,学习使用和了解内部机制,没有比读它们的单元测试更好的方式了。
- 1.mybatis
最开始我是看了mybatis3的中文手册
http://www.mybatis.org/mybatis-3/zh/java-api.html
但是总发现有点不对,可能是翻译没跟上,
后来换看英文文档
http://www.mybatis.org/mybatis-3/
可阅读水平有限,看起来有点枯燥,然后我fork了它的源码
https://github.com/mybatis/mybatis-3
对着它提供的单元测试,看起来竟异常的爽快,虽然代码也是英文的,但感觉个人英语水平虽然只有四级,但阅读英文代码立马升级为专八,比作弊还快。其中还发现了mybatis单元测试中用了hsqldb,顺带又学到了一个新的技术点。
- 2.FastDFS_client
FastDFS 提供了java,php等多个版本的客户端,我fork了一位同学的java版,学习它的api惊人的迅速,我从拉下代码到学会如何使用不会超过三分钟,两分57秒用来浏览它的单元测试,并定位了这个用例:
https://github.com/wenchukai/FastDFS_Client/blob/master/src/test/java/com/github/tobato/fastdfs/service/FastFileStorageClientTest.java
3秒钟反应到它就是这么用的。
然后花半个小时把那位同学用的spring-boot框架转化为基本的spring框架版:FastDFS_Client,因为有完整的单元测试,我只要保证替换为spring后,单元测试仍能通过就说明我的转化是成功的,这也是单元测试保证代码质量的用处,即使替换了它的框架,仍可以正常使用,接下来就是整合到自己的项目中了,非常的容易,我这里就是直接用springmvc封装了下,方便用http的方式发起文件上传,代码只有短短几行:
https://github.com/chulung/chulung.com/blob/master/src/main/java/com/chulung/craft/controller/FileUploadController.java
四、结语
在学习新框架,技术,源码的过程中,除了看官方文档,读别人的博客,我觉了拉下代码,学习下它的单元测试,自己动手跑一跑是一种更好的方式,再结合断点之类,能更清晰的了解一个技术的机制,这个就是我所了解的单元测试。
作者:初龙
原文链接:https://chulung.com/article/a-unit-test-in-the-eyes-of-development
本文由MetaCLBlog于2017-07-17 09:07:13自动同步至cnblogs
本文基于 知识共享-署名-非商业性使用-禁止演绎 4.0 国际许可协议发布,转载必须保留署名及链接。