c# - Assert.AreEqual 对 int 和 ulong 失败但对 long 和 uint 失败

标签 c# .net

好吧,我希望我的处理器没有烧毁,因为:

    [TestMethod]
    public void tenEqualten()
    {
        Int64 a = 10;
        UInt32 b = 10;
        Assert.AreEqual(a, b);
    }

工作得很好,但是这个:

    [TestMethod]
    public void tenNotEqualten()
    {
        Int32 a = 10;
        UInt64 b = 10;
        Assert.AreEqual(a, b);
    }

惨败。

你有没有得到相同的结果,还是只有我? 如果是,有什么想法,为什么? 如果这是 .Net 4.5 的已知问题,那么抱歉垃圾邮件,但我找不到它作为错误。

编辑:我找到了重复的 here和解释here

最佳答案

在您调用的第一个方法中 Assert.AreEqual<T>(T expected, T actual)其中 T类型为 Int64 ,这是因为 UInt32 可以隐式转换为 Int64。效果和你做的一样

    [TestMethod]
    public void tenEqualten()
    {
        Int64 a = 10;
        UInt32 b = 10;
        Assert.AreEqual(a, (Int64)b);
    }

这就是第一个版本通过的原因。

在你调用的第二个版本中 Assert.AreEqual(object expected, object actual)这失败了,因为它们是不同的类型,因此不“相等”。

通过将这两个数字放在 object 中,您可以使您的第一个版本像第二个版本一样运行。这将允许您使用相同的 Assert 重载。

    [TestMethod]
    public void tenEqualten()
    {
        Int64 a = 10;
        UInt32 b = 10;
        object c = a;
        object d = b;
        Assert.AreEqual(c, d);
    }

此方法将以与您的 tenNotEqualten 完全相同的方式失败方法将失败。

关于c# - Assert.AreEqual 对 int 和 ulong 失败但对 long 和 uint 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875504/

相关文章:

C# 使用后删除文件

c# - 异常消息是否应该全局化

c# - C# 允许在虚拟方法上使用 new 的用例是什么?

c# - 了解局部变量的垃圾收集器行为

c# - 如何将多个项目存储在一个 XML 文件中以便于解析?

c# - 打印多张图像

c# - LINQ to Entities 等效于 sql "TOP(n) WITH TIES"

c# - ownerType 不是 DependencyObject 的 DependencyProperty 有什么用?

c# - 如何使 UserControls 的代码隐藏继承基类?

c# - 为 IIS7 创建等同于 ISAPI 扩展的内容