NUnit:用于检查两个词典是否相同的API

时间:2010-02-01 07:47:24

标签: c# nunit

给出两个词典

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类型,它只是为了检查两个字典是否相同而运行到页面中。

有什么想法吗?

2 个答案:

答案 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