应该用shoulda吗?
Shoulda use shoulda?
我们目前使用思想机器人 shoulda gem 主要是为了规范我们 rails 模型的功能。
似乎 shoulda 提供的许多匹配器实际上正在测试 rails 行为。例如
describe Blog do
it { should have_many(:posts) }
end
只是测试模型定义中的这段代码
class Blog < ActiveRecord::Base
has_many :posts
end
确实有效。
这不是在测试 rails 行为(与我们模型的行为相反)吗?
这不是通常要避免的事情吗?
这种问题很容易引火烧身war,但无论如何,我还是给两分吧
大多数时候我确实使用 shoulda 匹配器,我同意你的看法,这些测试一开始看起来可能是多余的。那我为什么要继续使用它们呢?
当您进行 BDD 时,您并不是在测试单个单元,而是在实际测试一个对象 行为。在我看来,知道 Blog
实体使用许多 posts
的集合响应 posts
方法是 Blog
[=33= 行为的一部分].所以我想测试一下。
另外,如果严格按照TDD周期,理论上是不能添加
has_many :posts
行不违背先写测试的原则
与许多其他领域一样,最终答案取决于项目。如果您有一个包含许多模型的大型项目(或者一个正在成长为这样的项目),您可能真的想要测试接口。
如果您只有 Post
模型和 Author
,它可能看起来有点矫枉过正。但在这种情况下,它会花费你大约 4 行测试...那么为什么不呢?
我们目前使用思想机器人 shoulda gem 主要是为了规范我们 rails 模型的功能。
似乎 shoulda 提供的许多匹配器实际上正在测试 rails 行为。例如
describe Blog do
it { should have_many(:posts) }
end
只是测试模型定义中的这段代码
class Blog < ActiveRecord::Base
has_many :posts
end
确实有效。
这不是在测试 rails 行为(与我们模型的行为相反)吗? 这不是通常要避免的事情吗?
这种问题很容易引火烧身war,但无论如何,我还是给两分吧
大多数时候我确实使用 shoulda 匹配器,我同意你的看法,这些测试一开始看起来可能是多余的。那我为什么要继续使用它们呢?
当您进行 BDD 时,您并不是在测试单个单元,而是在实际测试一个对象 行为。在我看来,知道 Blog
实体使用许多 posts
的集合响应 posts
方法是 Blog
[=33= 行为的一部分].所以我想测试一下。
另外,如果严格按照TDD周期,理论上是不能添加
has_many :posts
行不违背先写测试的原则
与许多其他领域一样,最终答案取决于项目。如果您有一个包含许多模型的大型项目(或者一个正在成长为这样的项目),您可能真的想要测试接口。
如果您只有 Post
模型和 Author
,它可能看起来有点矫枉过正。但在这种情况下,它会花费你大约 4 行测试...那么为什么不呢?