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

时间:2015-01-17 22:11:27

标签: ruby unit-testing rspec tdd

这是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,但是有更好的方法来隔离每个吗?或者是正确的方法只是说一个测试是测试两种方法?

1 个答案:

答案 0 :(得分:1)

  

如果项目的要求是对每个方法进行测试

所以你有一个官僚主义问题,而不是技术问题。如果一个方法足够简单(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

......这对我来说似乎很残忍。