2013-07-11 7 views
6

Sai come posso affermare due dizionari di tipocome far valere i dizionari in Unit Testing

Dictionary<string,List<string>> 

nel mio progetto di test Unità?

ho provato con CollectionsAssert ma didn' lavoro per me.I intuire che ci vuole per semplici Dizionari come parametri (ad es Dictionary<string,string>) .Io credo che il problema per me viene dal secondo parametro del dictionary.Do sai come posso affermare quei due dizionari?

+0

Che framework di test si usa? –

+0

.NET Unit testing – mathinvalidnik

risposta

7

Uno dei modi che si darebbe un buon messaggio di errore:

public string ToAssertableString(IDictionary<string,List<string>> dictionary) { 
    var pairStrings = dictionary.OrderBy(p => p.Key) 
           .Select(p => p.Key + ": " + string.Join(", ", p.Value)); 
    return string.Join("; ", pairStrings); 
} 

// ... 
Assert.AreEqual(ToAssertableString(dictionary1), ToAssertableString(dictionary2)); 
+0

Cosa succede se il dizionario contiene un elenco di oggetti come valori? – k2ibegin

9

utilizzando Linq:

Dictionary.All(e => AnotherDictionary.Contains(e)) 
+0

Non funziona affatto per me. – mathinvalidnik

+0

Nice ... Basta fare in modo di aggiungere 'usando System.Linq;' – saluce

+0

Questo funziona per C# 3.0 e successivi. Per C# 2.0 si può usare: 'delegate (KeyValuePair e) {return properties.Contains (e); } ' –