0

次の行をテストする必要があります。

result = handle(streamOfMessages)

およびは十分messagescontext入力されたハッシュです。私は次のように書くことができますit

messages1 = [ {"type"=>"someType1","value"=>"someBigHash1"}, {"type"=>"someType2","value"=>"someBigHash2"}, {"type"=>"someType1","value"=>"someBigHash3"} ]
result1 = handle(messages1)
result1.should == [someValue1, someOtherValue1]

messages2 = [ {"type"=>"someType1","value"=>"someBigHash1"}, {"type"=>"someType2","value"=>"someBigHash2"}, {"type"=>"someType1","value"=>"someBigHash3"} ]
result2 = handle(messages1)
result2.should == [someValue2, someOtherValue2]

// same about messages3, result3 etc

配列の配列を作成messages[i]し、ループ内で参照できます。しかし、それはすべてかなりオールドスカルなアプローチに見えるので、より刺激的な (またはDSLベースと言うべき) プログラミング スタイルを探しています。メッセージのストリームを構築するため、および異なる結果を期待しながら複数のストリームを反復処理するための両方について、より優れた構文があれば素晴らしいことです。

4

2 に答える 2

0

入力ごとに個別のテストケースを動的に作成できます。

[ {"type"=>"someType1","value"=>"someBigHash1"}, {"type"=>"someType2","value"=>"someBigHash2"}, {"type"=>"someType1","value"=>"someBigHash3"} ].each do |h|
  it "should handle #{h[:type]} to return #{h[:value]}" do
     result1 = handle(h)
     result1.should == [value1, value2]
  end
end

value1とvalue2はここでは設定されていませんが、要点を理解していただければ幸いです。ハッシュの配列にそれらを挿入して、それらと比較することもできます。

于 2012-10-30T09:56:06.170 に答える
0

仕様を大幅に書き直すつもりはありません。私の意見では、単体テストには「賢い」コードを含めるべきではなく、ばかげたリファクタリングや DRY を行うべきではありません。それらから望む唯一のことは、コードの一部が特定の入力に対して正しい出力を生成するかどうかを確認することです。そして、あなたのコードはすでにそれを達成しています...

于 2012-10-30T10:59:53.750 に答える