2010-07-13 142 views
8

是否有類似於CollectionAssert.AreEquivalent()與嵌套集合一起工作?NUnit嵌套收集比較

下面的代碼...

CollectionAssert.AreEquivalent ( 
    new Dictionary<int, Dictionary<int, string>> 
    { 
     { 1, new Dictionary < int, string > { { 10, "foo" }, { 11, "bar" }, { 12, "spam" } } }, 
     { 2, new Dictionary < int, string > { { 20, "eggs" }, { 21, "eels" } } }, 
     { 3, new Dictionary < int, string > { { 30, "hovercraft" } } } 
    }, 
    new Dictionary<int, Dictionary<int, string>> 
    { 
     { 1, new Dictionary < int, string > { { 10, "foo" }, { 11, "bar" }, { 12, "spam" } } }, 
     { 2, new Dictionary < int, string > { { 20, "eggs" }, { 21, "eels" } } }, 
     { 3, new Dictionary < int, string > { { 30, "hovercraft" } } } 
    }); 

拋出該異常...

Expected: equivalent to 
    < [1, System.Collections.Generic.Dictionary`2[System.Int32,System.String]], 
    [2, System.Collections.Generic.Dictionary`2[System.Int32,System.String]], 
    [3, System.Collections.Generic.Dictionary`2[System.Int32,System.String]] > 
But was: 
    < [1, System.Collections.Generic.Dictionary`2[System.Int32,System.String]], 
    [2, System.Collections.Generic.Dictionary`2[System.Int32,System.String]], 
    [3, System.Collections.Generic.Dictionary`2[System.Int32,System.String]] > 

下斷言通行證:

CollectionAssert.AreEquivalent (
    new Dictionary < int, string > { { 10, "foo" }, { 11, "bar" }, { 12, "spam" } }, 
    new Dictionary < int, string > { { 10, "foo" }, { 11, "bar" }, { 12, "spam" } }); 

如果我更改了預期的集合,assert會在消息中引發兩個集合的全部內容的異常:

Expected: equivalent to < [10, foo], [11, bar], [12, spam] > 
But was: < [10, foo], [11, bar], [12, eggs] > 

我正在使用NUnit 2.4.7.0。

+0

類似的問題:http://stackoverflow.com/questions/4185164/recursive-assert-on-collection – 2013-11-21 22:07:07

回答

0

你需要自己寫。但是,如果是我,我會嘗試以不同的方式編寫我的斷言,以便如果兩個列表中有差異,那麼爲什麼/哪裏出錯是更明顯的。

+0

現有的方法很清楚預期的和實際的結果以及問題出在哪裏。我會用我希望看到的輸出更新我的問題。 – MikeWyatt 2011-04-08 13:43:27

0

一個老問題,但有人剛剛發佈一個鏈接到它的NUnit,討論...

的失敗是因爲NUnit的版本使用不支持兩個庫之間的平等的比較和對象比較有所回落。最近的版本不會有這個問題。