NUnit嵌套集合比较

时间:2010-07-13 17:49:00

标签: c# collections dictionary nunit assert

是否有类似于CollectionAssert.AreEquivalent()的东西适用于嵌套集合?

以下代码......

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" } } );

如果我对预期的集合进行了更改,那么断言会在消息中抛出两个集合的全部内容的异常:

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

我正在使用NUnit 2.4.7.0。

2 个答案:

答案 0 :(得分:1)

一个老问题,但有人刚刚在nunit-discuss上发布了一个链接...

失败是因为使用的NUnit版本不支持两个字典之间的相等比较,而是回到对象比较上。最近的版本不会有这个问题。

答案 1 :(得分:0)

你需要自己编写。但是,如果是我,我会尝试以不同的方式编写我的断言,这样如果两个列表中存在差异,则更明显的原因是什么/什么是错误的。