2010-07-13 10 views
8

Existe-t-il quelque chose de similaire à CollectionAssert.AreEquivalent() qui fonctionne avec des collections imbriquées?Comparaison de collections imbriquées NUnit

Le code suivant ...

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

génère cette exception ...

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]] > 

ASSERT suivante passe:

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

Si je fais des changements à la collecte prévue , l'assertion lance une exception avec l'intégralité du contenu des deux collections dans le message:

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

J'utilise NUnit 2.4.7.0.

+0

question similaire: http://stackoverflow.com/questions/4185164/recursive-assert-on-collection –

Répondre

0

Vous auriez besoin d'écrire le vôtre. Cependant, si c'était moi, j'essaierais d'écrire mes Assertions d'une manière différente de sorte que s'il y avait une différence dans les deux listes, il était plus évident pourquoi/ce qui n'allait pas.

+0

La méthode existante est assez claire sur les résultats attendus et réels et où le problème est. Je vais mettre à jour ma question avec ce que je voudrais voir en sortie. – MikeWyatt

0

Une vieille question, mais quelqu'un vient de poster un lien sur nunit-discuss ...

L'échec est parce que la version de NUnit utilisé ne prend pas en charge les comparaisons d'égalité entre deux dictionnaires et est retombé sur la comparaison d'objet . Les versions récentes n'auront pas ce problème.

Questions connexes