我的模型中有以下方法
def get_performance_data para, child_para_hash
performance_graph_data = {}
child_para_hash.each do |cp|
performance_graph_data[cp] = fetch_per_child_para_data(para, cp)
end
performance_graph_data
end
def fetch_per_child_para_data para, child_para
test_performances.where(network_data_condition(para, child_para)).select("AVG(value)avg_value, activity").group('act_num')
end
我在理解如何为模型方法中的每个循环编写测试用例时遇到了问题。
答案 0 :(得分:3)
良好的测试是关于验证方法的行为,而不是其内部工作。因此,根据发布的示例,您的测试应该检查 #get_performance_data 是否返回了您的灯具定义的 performance_graph_data 的正确值,而不是检查内部循环实现。< / p>
如果你的测试在概念上没有说“给定输入X,我的结果应该总是Y”,那么你可能正在测试错误的东西。与往常一样,这条规则也有例外,但我不会在没有充分理由的情况下违反规则。
答案 1 :(得分:0)
您可以通过将多个参数传递给and_return
来返回存根中的连续值,例如
mock_object = double('my_object')
mock_object.stub(:foo).and_return(1,2,3)
mock_object.foo # => 1
mock_object.foo # => 2
mock_object.foo # => 3
您可以在示例中调整此模式,并存储从fetch_per_child_para_data
返回的值,以模拟循环中重复方法调用的效果。