MSTest - 为什么没有 AreEqual(object, object, IComparer)

本文关键字:object IComparer 为什么 AreEqual MSTest | 更新日期: 2023-09-27 18:36:17

使用 MSTest 编写单元测试 我想断言返回值与我期望的值相等。

预期类型是不实现IComparable接口或IEquatable接口的自定义类型,这就是为什么我想Assert.AreEqual提供比较这两个对象的可能性。

我知道这种可能性存在于CollectionAssert.AreEqual.但是,此方法需要两个继承ICollection的 oject,而我的对象没有。

为什么Assert.AreEqual不允许我指定自定义比较器?我错过了什么吗?

MSTest - 为什么没有 AreEqual(object, object, IComparer<T>)

不确定这是否是实际原因,但是如果您的自定义IComparer有问题怎么办 - 您的单元测试将毫无意义(请记住,测试框架无法判断您是否为其编写了单元测试,更不用说它们是否"正确")

你能在测试中创建一个比较器吗?

var com = new MyComparer<Foo>();
int expected=0;
int actual = com.Compare(a,b);
if (actual!=0)
{
  Assert.Fail("oops");
}

也许不理想,但应该有效...几年前,我还在msdn上发现了这个问题,没有答案 - 但是问题海报提供了一种有趣的解决方法。