2013-10-03 23 views
2

我想比較2個對象expectedItemsresultItems IEnumerable<IDictionary<string, object>>但一直沒能做到多用它。如何字典比較平等的列表,在C#

此外,一個字典在代碼中初始化,另一個字典是從外部API的JSON響應中構建的。因爲JSON並不關心對象內屬性的順序,所以排除SequenceEquals

我有兩個相等的對象,所有的這些低調的方法失敗,
首先,

CollectionAssert.AreEqual(expectedItems, resultItems)

其次,

var expectedItems = entries.Select(e => e.Serialize()).ToList(); 
resultItems.Zip(expectedItems,(objects, dictionary) => 
objects.OrderBy(pair =>pair.Key).SequenceEqual(dictionary.OrderBy(pair => pair.Key))) 
            .Should() 
            .NotContain(false); 

的對象(據我看到的)是平等的。

enter image description here

我目前做錯了任何事情,我可以嘗試,或什麼?

編輯
的API來自這就是爲什麼失敗的時間戳修剪剔計數。 如何修剪expectedItems字典中的時間戳然後比較?所以,集合必須相同,並且時間戳的比較需要被覆蓋。任何人? enter image description here

回答

1

兩件事情來檢查:

  1. 是實現preperly的Equals()方法的對象?如果不平等只是檢查參考,並且由於它們是兩個不同的實例,它們看起來是不同的。 另一種選擇可能是,因爲你的對象代表一個時間戳,就像我猜想的那樣。
  2. 即使正確實現Equals,即使在毫秒(如果存在)部分,對象是否相同?
+0

是的,我進一步檢查,這是在往返行程中修剪的InternalTicks計數。任何想法如何反擊? – divyanshm

+0

所以檢查是否定義了等於(pt 1) –

1

你爲什麼不安裝FluentAssertions並做類似的事情?

resultsItem.ShouldAllBeEquivalentTo(expectedItems);

我不通過心臟的日期時間比較如何限制是知道的,但是你可以很容易地override特定財產的行爲。

+0

我已經安裝了流暢的斷言。將檢查此方法。謝謝! – divyanshm