[英]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.