好吧,我希望我的处理器没有烧毁,因为:
[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 的已知问题,那么抱歉垃圾邮件,但我找不到它作为错误。
最佳答案
在您调用的第一个方法中 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/