Сравнивая два enum * типа * для эквивалентности? - PullRequest
6 голосов
/ 11 сентября 2009

В моем приложении у меня есть два эквивалентных enum с. Один живет в DAL, другой в слое контракта на обслуживание. Они имеют одинаковые имена (но находятся в разных пространствах имен) и должны иметь одинаковые члены и значения.

Я хотел бы написать модульный тест, который обеспечивает это. Пока у меня есть следующее:

public static class EnumAssert
{
    public static void AreEquivalent(Type x, Type y)
    {
        // Enum.GetNames and Enum.GetValues return arrays sorted by value.
        string[] xNames = Enum.GetNames(x);
        string[] yNames = Enum.GetNames(y);

        Assert.AreEqual(xNames.Length, yNames.Length);
        for (int i = 0; i < xNames.Length; i++)
        {
            Assert.AreEqual(xNames[i], yNames[i]);
        }

        // TODO: How to validate that the values match?
    }
}

Это прекрасно работает для сравнения имен, но как проверить, что значения также совпадают?

(я использую NUnit 2.4.6, но я полагаю, что это применимо к любой платформе модульного тестирования)

Ответы [ 2 ]

14 голосов
/ 11 сентября 2009

Enum.GetValues ​​

var xValues = Enum.GetValues(x);
var yValues = Enum.GetValues(y);

for (int i = 0; i < xValues.Length; i++)
{
    Assert.AreEqual((int)xValues.GetValue(i), (int)yValues.GetValue(i));
}
1 голос
/ 11 сентября 2009

Я бы перевернул, как вы проверяете. Проще получить имя из значения, а не из имени. Перебирайте значения и проверяйте имена одновременно.

public static class EnumAssert
{
    public static void AreEquivalent(Type x, Type y)
    {
        // Enum.GetNames and Enum.GetValues return arrays sorted by value.
        var xValues = Enum.GetValues(x);
        var yValues = Enum.GetValues(y);

        Assert.AreEqual(xValues.Length, yValues.Length);
        for (int i = 0; i < xValues.Length; i++)
        {
            var xValue = xValues.GetValue( i );
            var yValue = yValues.GetValue( i );
            Assert.AreEqual(xValue, yValue);
            Assert.AreEqual( Enum.GetName( x, xValue ), Enum.GetName( y, yValue ) );
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...