一些shoulda的宏有什么意义?

时间:2010-03-29 15:49:24

标签: ruby unit-testing tdd shoulda

我认为shoulda真的很整洁,但我不明白为什么有些宏存在,例如:

  • should_validate_uniqueness_of :title
  • should_validate_presence_of :body, :message => /wtf/
  • should_validate_presence_of :title
  • should_validate_numericality_of :user_id

我对测试比较陌生,但这些服务的用途是什么?它们几乎是模型中发生的相同验证的精确镜像。例如,通过进入模型并编写validates_uniqueness_of :title然后编写一个说should_validate_uniqueness_of :title的测试,您究竟完成了什么?

3 个答案:

答案 0 :(得分:1)

我没有使用shoulda,我也不知道作者在想什么,但多年来我写了很多Ruby单元测试,所以我会猜测。

程序的某些部分可以纯粹以声明方式在RoR中声明,例如validate_uniqueness_of。您编写其他更复杂的方法来实现。课程通常包括两者的组合。请注意,后者通常比前者花费更长的时间(空间和时间)。

因此,如果有兴趣草拟一个类的设计,也许是因为一个人对“TDD”感到兴奋,可能会编写一个测试,声明类需要支持的所有内容:标题是唯一的,用户ID是mersenne无论如何。这写起来快速而简单。然后就可以为所有这些编写代码,知道类的合同,并能够以简洁的形式看到它。

这只是猜测。

答案 1 :(得分:1)

对于那些想要完全防御性测试覆盖率的人来说,如果有人打破了应用程序的任何功能,那么测试就会失败。

答案 2 :(得分:-1)

这些是特定于RSpec&的宏。 ActiveRecord的。

是的,其实应该和RSpec一起玩。

http://robots.thoughtbot.com/post/159805987/speculating-with-shoulda