比较两个enum *类型*的等价性?

在我的应用程序中,我有两个等效的enum 。 一个住在DAL,另一个住在服务合同层。 它们具有相同的名称(但位于不同的名称空间中),并且应具有相同的成员和值。

我想写一个强制执行此操作的unit testing。 到目前为止,我有以下内容:

 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,但我认为这适用于任何unit testing框架)

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)); } 

我会翻转你检查的方式。 从值中获取名称而不是名称中的值更容易。 迭代值并同时检查名称。

 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 ) ); } } }