我对枚举进行了以下测试:
[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 }
答案 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);
}
如果默认本身就是您正在测试的内容,它也会有直观的感觉。