将Enum值与Integer进行比较 - Assert.AreEqual

时间:2014-03-14 22:01:07

标签: c# enums nunit

我对枚举进行了以下测试:

[TestCase]
public void NoneIsDefaultTest()
{
    Assert.AreEqual(0, Command.None);
}

这个想法是确保枚举的任何添加都不会改变默认值。但是,测试失败了:

Expected: 0
But was:  None

是Assert.AreEqual自动应用.ToString()?我怎么能避免这个?

修改: 枚举定义:

internal enum Command { None = 0, Build, Config, Reconfig, Help, Version }

3 个答案:

答案 0 :(得分:5)

仅在格式化错误消息时,

AreEqual未使用ToString进行比较。枚举形成一种与底层值类型不同的类型,因此比较0.Equals(Command.None)返回false,因为枚举值不是int。

答案 1 :(得分:3)

转换为int应该没问题:

Assert.AreEqual(0, (int)Command.None);

答案 2 :(得分:1)

转换为int有效,但如果您要测试的只是默认值(这是我的问题背后的内容),您可以使用default关键字:

[TestCase]
public void NoneIsDefaultTest()
{
    Assert.AreEqual(default(Command), Command.None);
}

如果默认本身就是您正在测试的内容,它也会有直观的感觉。