Учитывая следующие Grade
реализация:
class Grade
attr_reader :sort_key
def initialize(sort_key)
@sort_key = sort_key
end
def <=>(other)
return nil unless other.respond_to?(:sort_key)
@sort_key <=> other.sort_key
end
end
Я бы просто проверить, что Grade#<=>
ведет себя должным образом, согласно тому, что documentation для Object#<=>
говорит:
# comparable_grade.spec
describe "Grade#<=>" do
it "returns 0 when both operands are equal" do
(Grade.new(0) <=> Grade.new(0)).should eq(0)
end
it "returns -1 when first operand is lesser than second" do
(Grade.new(0) <=> Grade.new(1)).should eq(-1)
end
it "returns 1 when first operand is greater than second" do
(Grade.new(1) <=> Grade.new(0)).should eq(1)
end
it "returns nil when operands can't be compared" do
(Grade.new(0) <=> Grade.new("foo")).should be(nil)
(Grade.new(0) <=> "foo").should be(nil)
(Grade.new(0) <=> nil).should be(nil)
end
it "can compare a Grade with anything that respond_to? :sort_key" do
other = double(sort_key: 0)
(Grade.new(0) <=> other).should eq(0)
end
end
Я бы не бить чтобы написать такой тривиальный метод, прежде чем писать свои тесты. Важно иметь тесты, не обязательно, как вы пришли к ним. – tadman
Даже если это тривиально, мне все равно хотелось бы посмотреть, как люди будут тестировать его, поскольку я новичок, когда дело доходит до тестирования. –
Я имею в виду, что вы написали метод, это не имеет большого значения, в отличие, скажем, написания большого приложения и * затем * попытки писать тесты. – tadman