c# – MSTest – 为什么没有AreEqual(对象,对象,IComparer)?

使用MSTest编写UnitTests我想断言返回值与我期望的相等.

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

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

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

最佳答案 不确定这是否是实际原因,但如果您的自定义IComparer出现故障会怎样 – 您的单元测试将毫无意义(请记住,测试框架无法判断您是否编写了单元测试,如果它们是“正确”)

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

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

也许不理想,但应该工作……
几年前我还在msdn上找到了this个问题,没有答案 – 但问题海报的解决方法是一个有趣的方法.

点赞