将操作系统表示为枚举

时间:2011-02-05 18:28:58

标签: c# enums

我希望在我们的自动化测试框架中添加测试编写者使用表示测试支持的最低操作系统版本的属性标记其测试方法的能力。例如,测试编写者会标记测试方法支持Windows Vista SP1及更高版本,然后框架将知道在Vista,7等上运行测试。

我的直觉是使用枚举来表示这种表示(例如OS.VistaSp1,OS.Win7等),但由于我们也支持多种操作系统类型(Mac,Linux等),因此枚举信息不足框架要了解最小值(例如,它不能轻易知道OS.Win7高于OS.VistaSp1,但与OS.MacOsX无关)

我的下一步是,我可以使用枚举的低位来表示操作系统类型,使用更高的位来表示[相对]版本号,这将解决问题。它不是最干净的,但使用它的测试编写者根本不需要了解这一点,并且只需要解析信息的少量代码,这些代码都可以封装在一些Utils类中。

关于这个问题的任何想法?这是一个干净的解决方案?有更好的解决方案吗? 谢谢!

4 个答案:

答案 0 :(得分:3)

是否无法使用现有的Environment.OperatingSystem类?

对于平台ID,它包含MacOSX,Unix,Win32S,Win32NT,Win32Windows,WinCE和XBox。
它还包含Service Pack的字符串和用于提供版本号的Version对象。

我不知道它是如何自动检测这些(我猜单声道支持一堆这些)因为我自己从未尝试过。

答案 1 :(得分:2)

我会使用(至少)两个不同的变量:

  • 一般操作系统类型(Windows,Linux,MacOS) - 枚举是理想的
  • 服务包/版本信息(可以是字符串,或者更确切地说是两个单独的字符串 - 例如“XP SP3”和“5.3.157”*)

这有两个好处:

  • 更容易对OS版本进行排序并确定兼容性问题,
  • 至少Service Pack版本可以跨操作系统重用,因此您可以减少所需的枚举值。

*不是真正的XP版本号,只是示例

答案 2 :(得分:0)

当您需要更多功能时,可以以与枚举类似的方式使用结构。声明一堆static readonly字段,这些字段是您的结构实例,就像一组枚举值一样(当然不在switch语句中):

public struct OSVersion
{
    public readonly string Name;
    public readonly Version Version;

    public OSVersion( string name, Version version )
    {
        Name = name;
        Version = version;
    }

    public static readonly OSVersion WindowsXPSP3 = new OSVersion( "XP SP3", new Version(...) );
    public static readonly OSVersion WindowsVistaSP1 = new OSVersion( "Vista SP1", new Version(...) );
    public static readonly OSVersion Windows7 = new OSVersion( "Win7", new Version(...) );
}

显然你需要在这里做更多的事情,比如可能添加更多的字段并重载一些运算符(这里必须使用相等运算符),但这会在很多方面起作用,比如enum但提供更多的功能。 / p>

答案 3 :(得分:0)

我会写一个OS枚举并使用Version对象作为第二个参数。