Microsoft.Win32.Registry在单元测试项目中字段为空

时间:2014-10-13 00:18:59

标签: c# unit-testing visual-studio-2013

我的设置:

  • Windows 7 Professional x64
  • 适用于Windows桌面的Visual Studio Express 2013
  • .Net Framework v4.5
  • 使用C#

我注意到Microsoft.Win32.Registry的所有静态属性(LocalMachine,CurrentUser等)在运行时在单元测试项目中都是null。为什么会这样?

我使用单元测试项目模板创建了一个新项目。代码如下:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Win32;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            RegistryKey key = Registry.LocalMachine;
        }
    }
}

构建项目后,我在RegistryKey key = Registry.LocalMachine;行设置断点,然后使用调试器运行测试( Ctrl + R 控制 + A )。

当断点被击中时,我调出立即窗口,键入Registry并点击 Enter 。我最终得到了以下输出:

Microsoft.Win32.Registry
    base: object
    ClassesRoot: null
    CurrentConfig: null
    CurrentUser: null
    DynData: null
    LocalMachine: null
    PerformanceData: null
    Users: null

注意:我已阅读an article,其中指出单元测试不应触及系统。作者提供了有关访问注册表的包装和模拟代码的信息,我同意作者的推理。最终,这可能就是我要做的事情。

我仍然对这些属性为空的技术原因感兴趣。

干杯。


更新[2014-10-12] 我在管理员帐户下运行Visual Studio(我右键单击并以管理员身份运行)。

作为测试,我在同一个解决方案中添加了一个控制台项目,并将相同的代码添加到Main方法中。我设置了一个断点,检查Microsoft.Win32.Registry,前面提到的注册表属性不为空。

0 个答案:

没有答案