给出两个词典
var dictA = new Dictionary<string, classA>();
var dictB = new Dictionary<string, classA>();
如何检查这两个词典是否相同? 此处的问题是我无法使用默认classA.Equals
来比较值对。相反,当且仅当假定词典中classA
类型的所有对象必须满足我自己的自定义IEqualityComparer<ClassA>
时,测试才会通过。
具体来说,我正在寻找像
这样的东西CollectionAssert.AreEquivalent(dictA, dictB, new ClassEqualityComparer());
ClassEqualityComparer
继承自IEqualityComparer<ClassA>
或等效。我不介意我是否必须继承NUnit类型IEqualityComparer
(例如IResolveConstraint
),但最重要的是Assert
方法必须类似于
Assertion(dictA, dictB, EqualityComparer)
或更简单的东西;我不想使用Assert.That
然后实现一个IResolveConstraint
类型,它只是为了检查两个字典是否相同而运行到页面中。
有什么想法吗?
答案 0 :(得分:2)
所以我想你需要测试字典“B”包含与“A”相同的所有键,反之亦然,然后使用比较器来比较每个值:
Assert.IsTrue(dictA.Keys.All(k => dictB.ContainsKey(k));
Assert.IsTrue(dictB.Keys.All(k => dictA.ContainsKey(k));
var cmp = new ClassEqualityComparer();
Assert.IsTrue(dictA.Keys.All(k => cmp.Equals(dictA[k], dictB[k]));
这会起作用吗?
答案 1 :(得分:0)
如果您可以在单元测试中控制这些词典的实例化,则可以将comparer传递给相应的constructor。