我正在以古老的方式学习 Rails。通过阅读使用 Rails 进行敏捷 Web 开发(第 3 版)作为起点。我目前在教授测试的章节中。我也知道其他 BDD 测试框架,例如 RSPec。所以我想知道 RSpec、Cucumber、Should 等框架是否取代了了解/使用 Test::Unit 的需求?它们本身是否相关并用于不同目的?
更新:由于我是测试新手,因此我也很想获得有关哪些资源对我熟悉不同框架有用的反馈。
谢谢!
世界变了!检查并支持@prusswan
我认为 Test::Unit 仍然是相关的,尽管围绕 BDD 和其他测试工具有很多炒作。
话虽这么说,如果您愿意,您可以绕过学习 Test::Unit 并立即从 RSpec 和 Shoulda 之类的东西开始,但是关于通过敏捷 Web 开发手册中的示例来查看的内容有一些话要说BDD 的想法来自哪里。
我发现自己仍然在某些项目中使用 Test::Unit,因为它是 Rails 附带的,并且仍然是一个非常棒的测试框架。
长话短说,我不认为它已经过时,但它不再是最前沿的了。BDD 是一种测试范式转变,尤其是当您开始使用 Cucumber 和 Webrat 时,但一旦您开始使用它就非常棒。Shoulda 是最容易过渡到的,所以我会从 Test::Unit 开始,然后转到 Shoulda,然后尝试 RSpec 和 Cucumber。
您正在测试或至少对测试感兴趣!这是最好的部分。最后,只要你对它感到满意,你使用什么并不重要。
祝你好运!
DHH 本人是 Test::Unit 的狂热用户之一,并且由于 RSpec / Cucumber 的相对复杂性而避免使用它们。
我尊重它背后的人,我完全赞成实验,但 rSpec 和 Cucumber 的扩散让我感到难过。
RSpec 在美学上冒犯了我,因为它在测试/单元上增加的复杂性没有明显的好处。
除非您有客户阅读测试,否则 Cucumber 对我来说毫无意义。为什么要为英语构建一个特定于测试的解析器?
重要的当然是我们让人们进行测试,所以工具不应该太重要。但是增加的复杂性仍然让我感到不安。
“something.should be_true”很好地总结了我的审美论点。那个电话伤害了我的眼睛,而不是“断言某事”。
如果您有兴趣,请继续阅读这些推特的推特。
只是以为我会发布 2012 年的更新:
在关于 RoR的三本 主要和当前(可与 Rails 3.2 一起使用,只需进行一些小的修改)介绍性书籍中,其中两本正在使用 Rspec(最多简短提及 Test::Unit),其中一本正在计划在下一版甚至moar Rspec上,所以现在很清楚谁将成为这场“战斗”的赢家
并允许我选择性地引用 dhh:
重要的当然是我们让人们进行测试,所以工具不应该太重要。
2014年重温:
Minitest 现在已经取代了 Test::Unit 作为当前 Rails 版本的默认设置。就个人而言,我认为与它的前身相比,它值得仔细研究,原因有很多——
Rspec 是一个完全独立的测试框架。Shoulda 是对 Rails 内置框架 Test::Unit 的增强。如果您使用的是 Shoulda,那么您使用的是 Test::Unit,但具有更多功能和更简单、更易读的语法。
我试过 Rspec 和 Shoulda,对我来说,Shouda 胜出。我更喜欢它。但这可能是一个品味问题。
请注意,您可以将 Cucumber 与 Shoulda 一起使用。
其他资源?我推荐 ZenTest 和 RedGreen gems。ZenTest 提供自动测试,让您在每次更改文件时自动运行测试。这是一个很大的帮助。
关于夹具与工厂,如果您需要设置一堆相互关联的对象来测试双方或父子关系和/或测试多对多关系,那么夹具工作得更好。实际上,我什至不确定您是否可以在工厂中做到这一点。所以不要忽视固定装置——它们有它们的用途。
仍然有很多人喜欢 Test::Unit,在某种程度上,这是个人喜好。但是,总的来说,您会发现 RSpec 方面的活动要多得多。真正酷的东西都是用 RSpec 和 Cucumber 完成的,所以如果你自己没有个人偏好,我可能会跳过 Test::Unit。但是,您应该足够熟悉它以阅读其他人用它编写的测试,但我不会预见到这会成为问题。