[英]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对象。
我不知道它如何自动检测到这些(我想单声道支持很多),因为我从来没有尝试过。
我为此使用(至少)两个不同的变量:
这有两个好处:
*不是真实的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.