比较MSTest中的不同数值类型

时间:2019-06-24 22:43:30

标签: c#

当使用两种不同的数字类型调用AreEqual(T,T)时,我在我认为不应该使用的情况下向我报告了相等性。在用于AreEqual(T,T)的MSTest文档(https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.testtools.unittesting.assert?view=mstest-net-1.2.0)中,它说42L不等于42。当我运行下面的代码以及双精度和整数时,将报告它们。彼此平等。我假设正在某个地方进行投射,但实际上是在幕后发生了什么?为什么文档中说对于不同的数字类型它们不应该返回相等,为什么说42L和42相等?

using Microsoft.VisualStudio.TestTools.UnitTesting;


[TestClass]
public class UnitTest1
{
        [TestMethod]
        public void TestMethod1()
        {
            long expected = 42L;
            int actual = 42;
            Assert.AreEqual(expected, actual);
        }

        [TestMethod]
        public void Test_Divide()
        {
            int expected = 5;
            double actual = 5;
            Assert.AreEqual(expected, actual);
        }
}

1 个答案:

答案 0 :(得分:1)

This是幕后发生的事情。

编译器选择最“宽”的类型为T,然后转换较小的类型。