Если вас особенно интересует, как это можно исправить с точки зрения модульного тестирования:
Попробуйте это
CollectionAssert.AreEquivalent(dict.ToList(), dictClone.ToList());
Объяснение
Существуют методы расширения для IDictionary , такие как .ToList()
, доступные в .Net 3.5 и более поздних версиях, которые преобразуют словарь в коллекцию KeyValuePair, которую легко сравнить с CollectionAssert.AreEquivalent
.
Они даже дадут достаточно полезные сообщения об ошибках! Пример использования:
IDictionary<string, string> d1 = new Dictionary<string, string> {
{ "a", "1"}, {"b", "2"}, {"c", "3"}};
IDictionary<string, string> d2 = new Dictionary<string, string> {
{"b", "2"}, { "a", "1"}, {"c", "3"}}; // same key-values, different order
IDictionary<string, string> d3 = new Dictionary<string, string> {
{ "a", "1"}, {"d", "2"}, {"c", "3"}}; // key of the second element differs from d1
IDictionary<string, string> d4 = new Dictionary<string, string> {
{ "a", "1"}, {"b", "4"}, {"c", "3"}}; // value of the second element differs from d1
CollectionAssert.AreEquivalent(d1.ToList(), d2.ToList());
//CollectionAssert.AreEquivalent(d1.ToList(), d3.ToList()); // fails!
//CollectionAssert.AreEquivalent(d1.ToList(), d4.ToList()); // fails!
// if uncommented, the 2 tests above fail with error:
// CollectionAssert.AreEquivalent failed. The expected collection contains 1
// occurrence(s) of <[b, 2]>. The actual collection contains 0 occurrence(s).