Вопрос

I have the following test for an enum:

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

The idea is to ensure that no additions to the enum change the default value. However, the test fails with:

Expected: 0
But was:  None

Is Assert.AreEqual automatically applying .ToString()? How can I avoid this?

Edit: enum definition:

internal enum Command { None = 0, Build, Config, Reconfig, Help, Version }
Это было полезно?

Решение 2

Casting to int should be fine:

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

Другие советы

AreEqual is not using ToString for the comparison, only when formatting the error message. Enums form a type distinct from the underlying value type, so the comparison 0.Equals(Command.None) returns false, since the enum value is not an int.

Casting to an int works, but if all you want to test is the default value (which is what was behind my question), you can use the default keyword:

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

It also has an intuitive feel, if the default itself is really what you're testing.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top