繁体   English   中英

将OS表示为Enum

[英]Representing OS as Enum

我希望为自动测试框架增加一种功能,使测试编写者可以使用代表测试支持的最低OS版本的属性来标记其测试方法。 例如,测试编写者将标记测试方法支持Windows Vista SP1和更高版本,然后框架将知道可以在Vista,7等上运行测试。

我的直觉是使用一个枚举来表示(例如OS.VistaSp1,OS.Win7等),但是由于我们还支持多种OS类型(Mac,Linux等),因此该枚举对于框架来说是不够的了解最小值(例如,无法轻易知道OS.Win7高于OS.VistaSp1,但与OS.MacOsX不相关)

不过,我的下一个建议是,我可以使用枚举的低位代表操作系统类型,而高位则代表[相对]版本号,这样就可以解决问题。 它不是最干净的,但是使用它的测试编写人员根本不需要意识到这一点,并且只需要少量的代码就可以解析出这些信息,这些信息都可以封装在某些Utils类中。

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

无法使用已经存在的Environment.OperatingSystem类吗?

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

我不知道它如何自动检测到这些(我想单声道支持很多),因为我从来没有尝试过。

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

  • 常规操作系统类型(Windows,Linux,MacOS)-枚举对此非常理想
  • 服务包/版本信息(可以是一个字符串,甚至可以是两个单独的字符串,例如“ XP SP3”和“ 5.3.157” *)

这有两个好处:

  • 排序操作系统版本和确定兼容性问题更加容易,
  • 至少该Service Pack版本可在操作系统之间重用,因此您可以减少所需的枚举值的数量。

*不是真实的XP版本号,仅是示例

当您需要更多功能时,可以使用类似于枚举的结构。 声明一堆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(...) );
}

显然,您需要在此处做更多的工作,例如可能添加更多字段并重载某些运算符(此处必须有相等的运算符),但这在许多方面都像枚举一样起作用,但提供了更多功能。

我将编写一个OS枚举,并将Version对象用作第二个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM