为什么这些 ulong 数组不被认为是相等的?
Why are these ulong arrays not considered equal?
考虑函数:
public static ulong[] productFib(ulong prod)
{
ulong fib1 = 0;
ulong fib2 = 1;
while ((fib1 * fib2) < prod)
{
ulong temp = fib1;
fib1 = fib2;
fib2 = temp + fib2;
}
return new ulong[] { fib1, fib2, 1 };
}
我正在练习一个测试如下所示的套路:
ulong[] r = new ulong[] { 55, 89, 1 };
Assert.AreEqual(r, Kata.productFib(4895));
在直接 window 中,我可以看到 return 数组不仅是 ulong
类型,而且具有我期望的 3 个元素,但 MSTest 失败并显示:
Message: Assert.AreEqual failed. Expected:<System.UInt64[]>. Actual:<System.UInt64[]>.
测试断言或我的函数是否有问题导致此测试失败?
谢谢
C# 数组是引用类型。 Assert.AreEqual()
将检查引用是否相等,而不是检查您是否传递了值类型。
Assert.AreEqual()
使用传递参数的 Equals()
方法。数组只是比较它们的引用,而不是它们的内容。所以两个不同的数组 instances 永远不会通过这个测试。
你可以这样使用 linq SequenceEqual
:
Assert.IsTrue(r.SequenceEqual(Kata.productFib(4895)));
考虑函数:
public static ulong[] productFib(ulong prod)
{
ulong fib1 = 0;
ulong fib2 = 1;
while ((fib1 * fib2) < prod)
{
ulong temp = fib1;
fib1 = fib2;
fib2 = temp + fib2;
}
return new ulong[] { fib1, fib2, 1 };
}
我正在练习一个测试如下所示的套路:
ulong[] r = new ulong[] { 55, 89, 1 };
Assert.AreEqual(r, Kata.productFib(4895));
在直接 window 中,我可以看到 return 数组不仅是 ulong
类型,而且具有我期望的 3 个元素,但 MSTest 失败并显示:
Message: Assert.AreEqual failed. Expected:<System.UInt64[]>. Actual:<System.UInt64[]>.
测试断言或我的函数是否有问题导致此测试失败?
谢谢
C# 数组是引用类型。 Assert.AreEqual()
将检查引用是否相等,而不是检查您是否传递了值类型。
Assert.AreEqual()
使用传递参数的 Equals()
方法。数组只是比较它们的引用,而不是它们的内容。所以两个不同的数组 instances 永远不会通过这个测试。
你可以这样使用 linq SequenceEqual
:
Assert.IsTrue(r.SequenceEqual(Kata.productFib(4895)));