在 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
...这对我来说似乎很糟糕。
这是 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
...这对我来说似乎很糟糕。