新手问题 Agile Web development with Rails 关于测试的问题

xautjzd · 2013年09月20日 · 最后由 liwei78 回复于 2013年09月20日 · 2354 次阅读

前段时间看过《Ruby on Rails Tutorials》,里面的测试都用的是 Rspec,现在看《Agile Web development with Rails》,里面又都用的是 TestUnits 之类的测试,到底要怎么整?尤其对新手来说,这真的是头大。而且感觉写测试的时间多过写代码的时间,写功能代码的兴致完全被写测试代码所消磨殆尽,突然感觉有点枯燥。

回到正题: 按照《Agile Web development with Rails》说的,ls test/unit,会看到product_test.rb文件,但我scaffold生成的文件test文件夹里面根本就没有unit文件夹,也没有functionnal文件夹,仅有fixtures.integration,helpers,controllers,models和mailers这几个文件夹,手动建test然后建对应的文件是没问题的,测试也能通过。但是按照书中所说这些东西应该是自动生成的,请问我这是哪出了问题?rake -T中也没有发现test:units task,请问怎么还可以通过rake test:units执行单元测试呢?

PS: 平时写项目有必要写那么详尽的测试么?如果需要写测试代码,用 Rspec 还是系统自带的这些测试呢?我感觉二者语法差不多,就是名字不一样而已

默认的测试框架从 TestUnit 变成了 MiniTest,这就是目录结构变化的主要原因,单元测试是一种测试的类型,是不是非得在 unit 目录下一点都不重要。

RSpec 是 BDD 风格的测试框架,两者之间的选择取决于你更偏爱哪种风格。但是从做的事情上来说,它们都可以很好地胜任各种测试工作。

学习写测试当然要花费一定的精力和时间,但是测试能够带来的好处则更多。我觉得你需要花点时间来学习一下,别急着下结论。尽管有一些人声称写测试会增加开发的时间消耗,但很多评测都证明事实恰恰相反,区别在于你到底会不会写,会不会利用测试来减少时间消耗。这不是测试应不应该的问题,而是你的能力是否可以驾驭的问题。

对于初学者,可以不必强求,特别是当你卡在测试环节的时候,你可以跳过去先实现,以后再补测试也可以。事实上,补测试也是一种学习测试的方法,因果倒置之后会有利于你理解当初为什么写不出测试来。绝大多数情况下,写不出测试的原因都是你没有真正理解你想要写的东西是什么,以及它的行为如何。

抽点时间看看 MiniTest 以及 RSpec 的文档吧,看看里面的例子会更有启发。

另外,的确没必要事事都写测试,Ruby on Rails Tutorial 里面的很多测试都是在现实里没必要的。但是你要明白,那是教程,它的主要目标是教会你怎么写,而不是让你完全照搬。

要有一棵懂得测试的心。

不写测试的最好理由就是占用需求开发时间,也因为如此,在追 bug 和升级版本的时候要花费更多的时间补充测试。此处没有对错之分,完全是需求和稳健之间的权衡。

小团队成员就是自己写自己的测试和代码,即所谓的白盒测试,左手代码,右手测试。在需求目标确定的前提下,测试用例的编写几乎和技术要点是吻合的。在测试用例的设计时,也能够对代码实现做到最小化设计。

比如,将 shou_price 方法由 helper 转到 model 中,测试的时候只要 product.show_price.should == '$99.99'.

测试是重构的第一步,建议多看看重构的书,对提升设计思路有益。

完善的测试应该包括:回归测试,单元测试,集成测试。至于如何把握他们,就看测试在项目中的重要性了。

测试很考验耐心,需要不断的自我反省,希望 lz 坚持测试优先的理念,这很宝贵。

#1 楼 @nightire 谢谢,原来是 TestUnit 被替换了,我先看看吧。没有说测试不好,只是觉得《Rails Tutorials》里的测试代码太多,感觉其实有些没有必要,学习过程中感觉书中示例有点要穷尽代码每一功能测试的意思。

穷尽代码每一功能测试的意思

请百度一下代码覆盖率和测试覆盖率两个概念,就知道了。。

对于复杂的业务,真的是要穷尽每一种可能,测试用例的设计要涵盖每一个逻辑分支。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号