Сравнение вложенных коллекций NUnit - PullRequest
9 голосов
/ 13 июля 2010

Есть ли что-то похожее на 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" } } );

Если я внесу изменения в ожидаемую коллекцию, assert выдает исключение со всем содержанием обеих коллекций в сообщении:

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

Я использую NUnit 2.4.7.0.

Ответы [ 2 ]

1 голос
/ 23 ноября 2013

Старый вопрос, но кто-то только что разместил ссылку на него в nunit-обсудить ...

Ошибка заключается в том, что используемая версия NUnit не поддерживает сравнения на равенство между двумя словарями и откатилась на сравнение объектов. Последние выпуски не будут иметь этой проблемы.

0 голосов
/ 07 апреля 2011

Вы должны написать свой собственный. Однако, если бы это был я, я бы попытался написать свои Утверждения по-другому, чтобы в случае различий в двух списках было более очевидно, почему / что не так.

...