2

我的模型中有以下方法

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

我在理解如何为模型方法中的每个循环编写测试用例时遇到问题。

4

2 回答 2

3

好的测试是关于验证方法的行为,而不是它的内部运作。因此,根据发布的示例,您的测试应该检查#get_performance_data是否为您的夹具定义的 performance_graph_data 返回正确的值,而不是检查内部循环实现

如果您的测试在概念上不是说“给定输入 X,我的结果应该始终为 Y”,那么您可能正在测试错误的东西。与往常一样,这条规则也有例外,但如果没有很好的理由,我不会违反规则。

于 2012-05-17T04:33:11.250 回答
0

您可以通过将多个参数传递给 stub 来返回连续值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以模拟循环中重复方法调用的效果。

于 2012-05-17T04:03:20.930 回答