2016-09-28 68 views
0

當單元測試時,我需要聲明兩個以隨機順序填充地圖的JSON結果。聲明以隨機順序輸出的兩個JSON結果

兩個JSONs都具有相同的模式,但大多數內容確實有所不同。

這些來自一個Kafka流(JavaPairDStream測試時),並提取從tuple2然後從JSON Strings轉換使用Jackson ObjectMapper到地圖。我正在使用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... 
    } 
} 

注:這工作得很好,現在因爲我只與兩個不同的事件一起工作。但我想了解如何通過可伸縮性來處理這種情況。

+1

什麼語言?並且可以向我們展示示例代碼(JSON和您的嘗試)? –

+0

已更新。感謝您的幫助,@HubertGrzeskowiak! – dinky

+0

請考慮下次再說明問題。你正在展示一個半熟的解決方案,沒有人真正知道你想達到什麼。 –

回答

1

試試Hamcrest匹配器containsInAnyOrder。您可能必須編寫自定義匹配器才能使代碼可讀。

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

感謝您的意見,tonicsoft。你的答案看起來像是比較兩個JSON輸出。但我沒有比較兩個JSON。我正在將JSON輸出與其各自的預期輸出進行斷言。 – dinky

+0

你爲什麼要對兩個對象進行斷言,而不是一個接一個呢? –

+0

啊我完全誤解了這個問題。答案已更新! – tonicsoft