首页 > 解决方案 > 比较 MSTest 中的不同数值类型

问题描述

当使用两种不同的数字类型调用 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);
        }
}

标签: c#

解决方案


就是幕后发生的事情。

编译器将最“宽”的类型选择为 T 并转换较小的类型。


推荐阅读