MSTest - 为什么没有AreEqual(object,object,IComparer <t>)?</t>

时间:2013-10-21 09:35:59

标签: c# unit-testing mstest icomparable

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

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

我知道CollectionAssert.AreEqual存在这种可能性。但是,此方法需要两个继承ICollection的对象,而对象则不会这样做。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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