簡體   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