码迷,mamicode.com
首页 > 其他好文 > 详细

测试驱动开发实践

时间:2016-07-15 00:15:22      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

总是以为自己了解了测试驱动开发,其实做起来和了解根本不是一回事。原来觉得代码清晰得很,后来试验了一下才知道那是自己的错觉。这次,让我们抛却Eclipse的自动补全功能,来一场真正的测试驱动开发吧。

项目描述:这是一个很简单的项目,目标是扫描磁盘上所有特定格式的文件,将其路径存储下来,通过程序可以快捷搜索到文件路径并自动定位到该文件。

用户故事(简单点写了):

1、              扫描磁盘,将目录下的所有文件列出来,将特定格式的文件信息存储到磁盘。

2、              所有文件的信息可以被查询。

3、              被查询出的信息可以双击打开所在文件夹并定位该文件。

好了,这就是第一次的迭代目标,其中文件的格式枚举,存储到磁盘的形式,都可以以后再说,那么针对于故事的过程,我们开始设计并写测试吧:

设计:

1、          平面文件存储,每个文件以行为单位存储,不同属性以###分割,实例化到FileInfo类(故事1)。

2、          平面文件叫fileDB。文件以行读取到List,以带格式的String写入(故事1)。

3、          特定文件格式以正则表达式匹配(故事1)。

4、          查询的条件是文件名,通过遍历List查找属性是否符合contains规则(故事2)。

5、          用JNI explorer打开并定位文件(故事3)。

建立测试:

这里首先关注的是设计中的第一条。

新建一个Junit Test Case,我将测试的类叫FileInfo,所以这个测试类叫FileInfoTest,它与FileInfo在同一包路径下,但是在不同的resource folder下。

技术分享

这个Test Case应该不能通过测试。

技术分享

事实证明,它的确无法通过测试

技术分享

然后,它应该这样被初始化。

技术分享

编译错误!那当然,因为类FileInfo还不存在,让我们建立它。

技术分享

编译通过了,我们需要它将字段输出成一个带###分隔符的字符串,字符串的组成是FileName###FileDir###FilePath###LastUpdate。

那么测试应该变成这样了:

技术分享

为了解决这些红杠,FileInfo得变成这样。

技术分享

(这里有那么一点点牵强,就是get方法和成员变量的来源不是“刚刚好通过测试”,而是测试原本是为了引出成员变量)

现在toString应该变成这样:a.txt###c:\\###c:\\a.txt###2016-01-01。

所以测试应该变成这样(这样写代码好费时间!但参与设计的过程也相应变多,思考和工作量都在增长)

技术分享

当然,测试失败了,二者并不相等

 

 技术分享

原因当然在toString

修改FileInfo的toString方法:

技术分享

测试通过了!

技术分享

此时,我在想,如果因为某种原因,我想将###换成@@@,那么toString方法中###应该以变量的形式出现。但因为此次将修改的代码对通过测试没有任何意义,也不能增加功能,所以我不这么做。我会在什么时候这样做呢?我会等到代码的功能很多,我重构它并能展示此时测试对我重构的意义的时候。

现在我们完成了设计1,来开始设计2吧。(未完……)

 

测试驱动开发实践

标签:

原文地址:http://www.cnblogs.com/wang-ze/p/5671879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!