我正在对一些检查当前操作系统版本的代码进行单元测试,因为 dll 中的方法只能在 Windows 7 上运行。为此,使用了以下内容
if (Environment.OSVersion.Version >= new Version("6.2"))
//Windows 8
else
//Windows 7
是否有一种简单的方法对此进行单元测试,或者是否需要更改代码(包装并注入(inject)环境?)
您可以使用 Microsoft Fakes(假设您拥有 Visual Studio 的终极版)。
https://msdn.microsoft.com/en-us/library/hh549175.aspx
这将允许您伪造静态方法:)
为系统添加一个 Fakes 程序集:
打开“Fakes → 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);
}
}
我是一名优秀的程序员,十分优秀!