2016-09-28 12 views
0

ユニットテストでは、マップをランダムな順序で設定する2つの結果をアサートする必要があります。ランダムな順序で出力される2つのJSON結果をアサートする

JSONsのスキーマは同じですが、ほとんどの内容が異なります。

これらは、Kafkaストリーム(JavaPairDStreamテスト)から来て、Jackson ObjectMapperを使用してマップするJSON Stringsから変換され、次いでtuple2から抽出されます。私はqueueStreamを使用していますが、奇妙なことに、Sparkのワークフローでテストするとランダムな注文です。

編集:私はセットは順序を変更する場合がありますので、Listを使用することを決定した...ここで

Javaコードです:

//Create a list to store maps 
List<Map<String, Object>> list = new ArrayList<>(); 
list.add(map1); 
list.add(map2); 

//Traverse each map in list and apply correct assertions 
for (Map<String, Object> map : list) { 
    //if Event is "Event1", assertions for "Event1" Event 
    if (map.get("Event").toString().equals("Event1")) { 
     Assert.assertEquals(map.get("Event").toString(), "Event1"); 
     more assertions go here... 
    } else { 
     //if Event is not "Event1", assertions for "Event2" Event 
     Assert.assertEquals(map.get("Event").toString(), "Event2"); 
     more assertions go here... 
    } 
} 

注:私はので、これは今正常に動作します2つの異なるイベントでのみ動作します。しかし、この状況をスケーラビリティで処理する方法を学びたいと思います。

+1

どのような言語ですか?サンプルコード(JSONとあなたのtry)を見せてもらえますか? –

+0

更新されました。助けてくれてありがとう、@HubertGrzeskowiak! – dinky

+0

次回に問題を述べてください。あなたはハーフ・ベーク・ソリューションを提示しており、達成しようとしていることは誰にも分かりません。 –

答えて

1

ハムクレストマッチャーcontainsInAnyOrderをお試しください。コードを読みやすくするためにカスタムマッチャーを記述する必要があります。

List<Map<String,Object>> myJsonObjectsInRandomOrder; 
... 
assertThat(myJsonObjectsInRandomOrder, containsInAnyOrder(new CustomMatcher("Event1", ...), new CustomMatcher("Event2", ...))); 
+0

あなたのご意見ありがとうございます、tonicsoft。あなたの答えは、2つのJSON出力を比較しているようです。しかし、私は2つのJSONを比較していません。私は両方のJSON出力をそれぞれの期待される出力にアサーションしています。 – dinky

+0

なぜあなたは1つではなく2つのオブジェクトに対してアサーションを行っていますか? –

+0

ああ私は完全にその質問を誤解しました。回答が更新されました! – tonicsoft

関連する問題