2011-02-05 38 views
2

我期待在测试编写者的测试框架中添加代表测试支持的最低操作系统版本的属性,以便标记测试方法。例如,测试编写者会标记测试方法支持Windows Vista SP1和更高版本,然后该框架将知道在Vista,7等上运行测试。将操作系统表示为枚举

我的直觉是为此表示使用枚举(例如OS.VistaSp1,OS.Win7等),但由于我们也支持多种操作系统类型(Mac,Linux等),因此枚举不足以让框架知道最小值是多少(例如,它可以不容易知道OS.Win7高于OS.VistaSp1,但与OS.MacOsX无关)

我的下一个虽然是我可以使用枚举的低位来表示OS类型和高位来表示[相对]版本号并且可以解决问题。它不是最干净的,但是测试编写者使用它并不需要知道这一点,并且只有少量代码需要解析出信息,这些信息都可以封装在某些Utils类中。

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

回答

2

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

  • 一般的操作系统类型(Windows,Linux和MacOS的) - 一个枚举是非常适合这种
  • 服务包/版本信息(可能是一个字符串,或者说甚至是两个单独字符串 - 如 “XP SP3” 和 “5.3.157” *)

这有两个好处:

  • 更容易对操作系统版本进行分类并确定兼容性问题,至少该服务包版本可跨操作系统重复使用,因此您可以减少所需枚举值的数量。

*不是一个真正的XP版本号,只需例如

+0

我认为这一点,但我的问题是我需要所有的系统支持存储的地方版本(因为我需要生成测试数据为每个受支持版本更大分钟的版本。我喜欢我的解决方案是,数据实际定义在枚举中,而不是一个单独的XML文件(或类似的东西)... – user3213423 2011-02-05 18:56:21

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

显然,你需要做更多的在这里,像可能会添加更多的字段并重载一些运算符(这里必须使用相等运算符),但是这将在许多方面起作用,如枚举,但提供更多的权力。

+0

我喜欢这个很多,但(如果我错了纠正我)不认为你这样声明const,因为他们需要编译时间常数(与属性也是如此)...... – user3213423 2011-02-05 19:17:46

+0

对不起,你是对的,他们需要的是`静态readonly`领域,如我有最初 – 2011-02-05 19:35:26

0

我会写一个操作系统枚举并使用一个版本对象作为第二个参数。

3

是不是可以使用已经存在的Environment.OperatingSystem类?

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

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