为什么Assert.AreEqual只有double和object的重载



我想比较int、boolean、string和其他类型。出于好奇,为什么Assert.AreEqual明确支持doubles而不支持其他类型?

我应该这样做吗:

var a = 1;
var b = 2;
var areEqual = a == b;
Assert.IsTrue(areEqual);

而不是:

var a = 1;
var b = 2;
Assert.AreEqual(a, b);

编辑以澄清:问题是为什么这个方法不显式支持其他类型,而只支持双重类型。

编辑2以获得更多澄清:这个问题是关于好奇心的,我没有问题要解决。

它有助于查看确切的方法签名:

Assert.AreEqual(double expected, double actual, double tolerance);
Assert.AreEqual(object expected, object actual);

正如你所看到的;公差";这一概念显然只适用于比较CCD_ 1类型时。文档实际上直接解决了这一点:

类型为float和double的值使用一个额外的参数进行比较,该参数指示它们将被视为相等的公差。

因此,重载是为了处理比较浮点值时的精度问题。这是一个网上有据可查的问题。例如,这里来自微软:

由于两个值的精度不同,两个明显等效的值可能不相等[…]一种技术不是为了相等而进行比较,而是定义两个值之间可接受的相对差值(例如其中一个值的.001%(

要比较两个double值,您应该执行以下操作:

Assert.AreEqual(0.1 + 0.1 + 0.1, 0.3, 0.00000001);

最新更新