如何对包含Environment.OSVersion.Version的代码进行单元测试

时间:2016-01-14 16:52:28

标签: c# unit-testing

我正在测试一些检查当前操作系统版本的代码,因为dll中的方法只能在Windows 7上运行。为此,使用以下内容

if (Environment.OSVersion.Version >= new Version("6.2"))
    //Windows 8
else
    //Windows 7

是否有一种简单的单元测试方法或者需要更改代码(包装和注入环境?)

1 个答案:

答案 0 :(得分:6)

您可以使用Microsoft Fakes(假设您拥有Visual Studio的Ultimate版本)。

https://msdn.microsoft.com/en-us/library/hh549175.aspx

这将允许您伪造静态方法:)

为系统添加Fakes程序集: Fakes solution explorer

打开"假货→mscorlib.fakes"并将其编辑为如下所示:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="mscorlib" Version="4.0.0.0"/>
  <ShimGeneration>
    <Add FullName="System.Environment"/>
  </ShimGeneration>
</Fakes>

执行构建。

您现在可以编写单元测试:

[TestMethod]
public void TestMethod1()
{
    using (ShimsContext.Create())
    {
        System.Fakes.ShimEnvironment.OSVersionGet = () => new OperatingSystem(PlatformID.Win32Windows, new Version("99.99"));

        Assert.AreEqual(Environment.OSVersion.Version.Major, 99);
    }
}