TDD/BDD,测试/行为如何驱动开发?

看过一些关于 RoR 里 TDD/BDD 的概念和实践的文章,Test::Unit 和 RSpec 我也知道怎么使用,也尝试过在一些小项目中用它们先写好测试/行为描述,然后开始写实现,但总是感觉写出来的测试/行为描述都是些琐碎的东西(例如 Model 的字段取值范围之类),跟我真正想要的功能似乎并没有太大关系,从而无法驱动出我需要的实现代码。

请问这是怎么回事,我需要怎样来解决这个问题?
[b]问题补充:[/b]
谢谢 open2ye 的回答,但是我现在的情况是测试无法驱动出功能,开发根本没有办法按照 TDD 的方式继续下去了,怎么坚持?

有测试代码写得比较好的开源 Rails 项目推荐吗?我所在的公司开发团队小,并没有可以参考学习的优秀代码。
[b]问题补充:[/b]
其实我觉得我的问题不在于不知道什么东西该测什么东西不该测,而是根本就不知道如何写出能驱动出功能的测试,感觉写出来的测试都是微不足道的,没有抓住重点的测试,所以无法驱动出想要的功能来。简言之,就是不知道如何设计测试。

请问如何才能学习这种能力?有什么讨论这个问题的优秀书籍吗?

我觉得你现在需要练习的是书写user story(用户故事)的能力。把你的业务需求用一个一个User Story描述出来,User Story要尽量细一点,然后一个User Story就是一个spec,就这么简单。

[url]http://errtheblog.com/posts/54-be-dee-dee-and-me[/url]

你可以看看这篇文章。用test spec可以先写User Story,例如:

[quote]A User (in general):

  • should be able to digg a story
  • should not be able to digg a story twice
  • should be able to tell if he has dugg a story [/quote]

这是一个User Story,用yaml格式描述的,然后运行一个rake task,就生成spec的骨架了,接着你填写spec的测试内容就可以BDD驱动编程了。

这是每个刚开始 TDD/BDD 的人都会有的疑问.

你现在需求的是坚持下来.

到 你测试覆盖不到就睡不着觉时. 你就明白了.

快速学习: 看看别人的测试代码. (Rails 源码)

再看回答

感觉自己有点跑题,
什么东西该测, 什么东西不该测,

在我们公司是这样定义的,

如果你把你代码中的一句话删除, 测试还是通过的话
那么你就应该加个测试了

其实ruby on rails有很多优秀的开源项目,rforum,typo,instantwiki,都可以参考

TDD中的T,更多的含义是用测试代码描述[b]需求[/b]。

另外还要加上不断的[b]重构[/b]。

测试驱动,重要的是思想。

为什么要测试驱动,是优于传统的先写代码再写测试。

比如有数据库增加功能。
先写
A a = new A()
dao.save(a);

然后再去写dao这个实现。
这样的好处是先去思考你要完成的功能是什么。

测试代码写好了,功能就出来了。

“无法驱动出我需要的实现代码”显然是你没把测试代码没有体现你要的功能。

测试驱动开发。呵呵~。那本没看完。只能无法回答你问题哦。

对测试而言,楼上的楼上说的对,重要的是思想,一定要有所测试,有所不测。这方面和java是一样的,建议看看Junit on Recipts那本书,也许会有所获

不论怎么做,最重要的就是不断的实践/实践

写测试驱动代码并不只是写测试代码,是假设你的功能代码已经完成(用mock类),你的测试驱动代码以用户的角度来调用还未实际编写程序(用mock类),来完成实际业务需求。

这样做的目的是要找出那些功能是实际会用到的,然后将用到的代码真正实现,这就是测试驱动开发。