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

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 に答える