У меня есть дорогой метод, который называется calculate_total
.Мне нужен метод с именем total
, который вернет результат calculate_total
.Последующие вызовы total
должны возвращать предыдущий результат calculate_total
.
. Я хочу сделать это в тестовом режиме.Вот мои тесты (я использую RSpec):
describe Item do
describe "total" do
before do
@item = Item.new
@item.stub!(:calculate_total => 123)
end
it "returns the calculated total" do
@item.total.should == 123
end
it "subsequent calls return the original result" do
previous_total = @item.total
@item.total.should equal(previous_total)
end
end
end
Это не очень хороший тест, потому что следующий метод делает тесты успешными, но я ожидал, что второй тест провалится:
def total
calculate_total
end
Причина в том, что calculate_total
возвращает Fixnum
, поэтому ruby не видит результат как 2 разных объекта.Я ожидал, что второй тест провалится, поэтому я мог бы сделать следующее, чтобы он прошел:
def total
@total ||= calculate_total
end
Кто-нибудь знает лучший способ проверить это?
Не думаю, чтоэто лучший / правильный способ проверить это, но я остановился на этом: https://gist.github.com/1207270