在 Rspec 中获取和设置属性的测试方法

Testing methods that get and set attributes in Rspec

这是 rspec website 中唯一的代码示例:

# bowling_spec.rb
require 'bowling'

describe Bowling, "#score" do
  it "returns 0 for all gutter game" do
    bowling = Bowling.new
    20.times { bowling.hit(0) }
    bowling.score.should eq(0)
  end
end

如果项目的要求是对每种方法进行测试,那么 #hit 的测试会是什么样子?

我可以看到这个测试(一旦添加了多个示例)将同时测试 #hit#score 但是有更好的方法来隔离每个吗?或者只是说一个测试就是测试两种方法才是正确的方法?

If a requirement of a project was to have a test for every method

所以你有一个官僚问题,而不是技术问题。如果一种方法足够简单 (hit) 以完全指定为指定另一种方法 (score) 的副作用,那么重做规范只是为了关注 setter 是多余的。但如果你必须这样做,你可以复制它并调整现有的描述,例如:

describe Bowling, "#hit" do
  it "sets score to 0 for all gutter game" do
    bowling = Bowling.new
    20.times { bowling.hit(0) }
    bowling.score.should eq(0)
  end
end

...这对我来说似乎很糟糕。