给定两个字典
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>
, 或等效的。我不介意是否必须子类化 IEqualityComparer
的 NUnit 类型(例如 IResolveConstraint
),但最重要的是 Assert
方法必须类似于
Assertion(dictA, dictB, EqualityComparer)
或者更简单的东西;我不想使用 Assert.That
然后实现一种类型 IResolveConstraint
进入页面只是为了检查两个词典是否相同。
有什么想法吗?
最佳答案
所以我猜你需要测试字典“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]));
那行得通吗?
关于c# - NUnit:检查两个字典是否相同的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175309/