我正在使用Mocha进行模拟测试。以下是相关代码:
# test_player.rb
should "not download the ppg more than once for a given year" do
@durant.expects(:fetch_points_per_game).at_most_once
ppg = @durant.points_per_game
ppg2= @durant.points_per_game
assert_equal ppg, ppg2, "A player should have a points per game"
end
# player.rb
class Player
# ...
def points_per_game(year=Date.today.year)
@points_per_game ||= fetch_points_per_game(year)
end
alias_method :ppg, :points_per_game
private
def fetch_points_per_game(year=Date.today.year)
31.2
end
end
测试失败,抱怨有“意外调用:#。find_points_per_game(any_parameters)”
我对我的代码的理解是,如果@point_per_game为nil,将调用fetch_points_per_game,否则,结果将被缓存,以便将来调用points_per_game。那么为什么测试抱怨fetch_points_per_game被调用两次?
答案 0 :(得分:1)
在您的期望中,您没有指定返回值,因此存根调用返回nil。这就是它第二次被召唤的原因。如果您将期望更改为:
@durant.expects(:fetch_points_per_game).at_most_once.returns(1.23)
您应该会发现测试现在通过了。