c# - NUnit:检查两个字典是否相同的 API

标签 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> , 或等效的。我不介意是否必须子类化 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/

相关文章:

visual-studio-2008 - Visual Studio NUnit 集成

c# - 从 .Net 进程启动 AutoCAD 2015

c# - 在 Visual Studio 中的设计时列出所有公共(public)类属性和字段

c# - 仅序列化对象的更改属性

c# - 如何在 WPF 中获取 ArcSegment 的中点

c# - 如何忽略特定派生类的基类中的 'shared' NUnit 测试

c# - 如何在 STAThread 模式下运行单元测试?

c# - 如何用 NUnit 替换 MSTest (C#)

c# - CRM ConditionExpression 比较两个属性

c# - 使用 Fluent Assertions 库的多个断言