我从搞 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 的地址 ([email protected]), 要查看 to 的 host 是否在系统注册, 然后要查看 to 的 user 是否是被用户许可的, 接着还要查看 这个用户是否是有效的 (就是是否有续费), 这样要写个测试, 要有 3 对测试, 然后这 3 对测试, 还要去写模拟数据, 感觉没力气下手...
写这个功能, 有种要写 3~6 倍代码量的测试的感觉