为什么这些ulong阵列不被认为是平等的?

时间:2017-08-31 12:51:49

标签: c# arrays mstest

考虑一下这个功能:

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 };
    }

我正在研究一个kata,其测试结果如下:

ulong[] r = new ulong[] { 55, 89, 1 };
Assert.AreEqual(r, Kata.productFib(4895));

在即时窗口中,我可以看到返回数组不仅是ulong类型,而且还有我期望的3个元素,但是MSTest失败了:

Message: Assert.AreEqual failed. Expected:<System.UInt64[]>. Actual:<System.UInt64[]>.

测试断言或我的函数是否有问题导致此测试失败?

谢谢

2 个答案:

答案 0 :(得分:3)

Assert.AreEqual()使用传递参数的Equals()方法。数组只是比较他们的引用,而不是他们的内容。因此,两个不同的数组实例将永远不会通过此测试。

你可以像这样使用linq SequenceEqual

Assert.IsTrue(r.SequenceEqual(Kata.productFib(4895)));

答案 1 :(得分:0)

C#数组是引用类型。 Assert.AreEqual()将检查引用相等性,而不是您是否传递了值类型。