我从搞 python 起,一直在接受测试驱动开发引导。
但我有两个疑问,是否都确定这个测试利大于弊?
时间 我在做一些小项目时,有时会先写测试来驱动,写一阵发现写测试的时间要大于我写逻辑功能的时间了。
多细 细度的把握,测试写多细,是否真的要具体到每个函数。
我目前的做法是这样,先把整体的架构框架搭起来,把基础功能完善,再补测试,只写功能性测试,不会具体到 controller 和 model. 尝到的一个好处是,可以跟随 rails 的新版本跟进,升级 rails 版本后把测试用例一通就差不多了。
大家一起来交流交流,谢谢。
当脑中有一个大概的设计,觉得应该有一个接口,输出输出是这样子,把这个想法用代码表示出来,这就是一个测试用例了。
然后觉得这个接口太大,需要一些小的处理方法,也把这个方法的输入输出地用代码表示,就是另一个测试用例了。测试用例可以随着想法变更增删。
其实打开终端,敲调试代码的时候,就是在写一次性的测试代码,而且很可惜的是这些代码只用一次就扔了,其实很可能还有用的。
以前学习 Qt 编程,未接触自动测试,也是用了 Rails 才用上了。现在我对前端测试不熟,但也觉得是必须的,像 jQuery 本身是带测试的。前端测试要怎么整理我实践还太少。
@hhuai , 如果使用 BDD, 测试代码量大于功能,很正常的。
我粗粗的看过 the RSpec Book, 尝试着描述一下 BDD.
关键你必须理解这是一种开发方式,而非测试框架,(只不过初期作为开发方法, 同时后期也可以作为测试框架), 其精髓就是必须先有测试 (或行为), 然后以测试 或行为为驱动,然后就是自外向内,又自内向外的反复迭代,重构的过程。
第一步:先使用 cucumber 来表述对象之间的外部关系,即实现 Feature. (这一步,传统模式,往往都是先通过了内部单元测试,才进行外部的集成测试. 事实证明,这种方式在后期是绝对低效的,尤其是错误涉及到更改单元对象内部 代码),
第二步:下一步就是针对所有的 feature 定义 step_definitions.
这其中的精髓是:从外到内,根据需求添加代码,而且这些代码要足够简单,只
需要满足当前迭代就好。编写 step_definitions 就是一个反复的出错,添加对应
step_definition 除错的过程。直到改正所有的跟对象之间的关系
有关的
错误,直到最后只剩下一些逻辑错误,这时候就该进入 RSpec 迭代了。
第三步:Rspec 相对来说,更像测试代码。不过此时的目的是为迭代服务,而非 测试。实现对应功能以后,再返回 Cucumber, 直到实现这个软件的 feature.
我自己也是糊里糊涂。
我直接复制一段介绍:
行为驱动测试和一般测试的最大不同为:
根据一个需求,写出测试驱动代码,常常叫做 UserStory.
运行 Story 测试,必然是失败的。
根据 Story, 来编写代码
只满足 Story 所需功能。不多不少!
再运行 Story 测试,完整通过测试。
重构现有代码,使其尽量简单,高效。
再根据新的需求,写出新的 Story.重复以上过程。
这个循环过程,常常被称作 red/green/refactor.
对了,@hhuai, 留下你的邮箱。github 稍后再搞,你要感兴趣,我先给你发我的 的配置,你看看。
我也是只写关键测试,只要他能驱动我的开发而确保我的主要逻辑不会出问题就可以了 一开始会觉得慢点,但写好测试的框架后,就快了,这和写代码框架也需要时间一样
没有测试,你根本就没有办法进行重构
我一直都是推荐 TDD/BDD 的,有时项目太赶来不及写测试后期也要找时间把测试补上,昨天刚写了一篇介绍 TDD 的博文,有兴趣可以去看下 http://zernel.github.com/Technical-Diary/2012/03/07/TDD-practice/
啊?? 怎么可能呢?网易邮箱也会出问题吗 ?
收件人 发送状态 时间 [email protected] 成功到达对方服务器 2012 年 3 月 8 日 18:16(星期四)
是不是搞错了?你给我来封邮件。[email protected]
求指教下,我在写个功能,采用 bdd
方式,但是卡住了,感觉写测试的工作量好大...
一个邮件转发的,根据 to 的地址 (user@host), 要查看 to 的 host 是否在系统注册,然后要查看 to 的 user 是否是被用户许可的,接着还要查看 这个用户是否是有效的 (就是是否有续费), 这样要写个测试,要有 3 对测试,然后这 3 对测试,还要去写模拟数据,感觉没力气下手...
写这个功能,有种要写 3~6 倍代码量的测试的感觉