【问题标题】:How to host VS IDE during integration test via MSTest?如何在通过 MSTest 进行集成测试期间托管 VS IDE?
【发布时间】:2015-04-08 08:49:26
【问题描述】:

我创建了一个集成测试项目来测试 VS Extension。如果我从 Visual Studio IDE 运行测试,所有测试都运行良好,并且每个方法都会生成一个新的 VS IDE。测试方法标有以下属性:

[HostType("VS IDE")]
[TestMethod]
public void TestWhateverMethod() { ... }

但是,如果我尝试自动化测试,并通过 MSTest(或 VSTest)从命令行运行它们,对于托管在 VS IDE 中的测试,我收到以下错误消息:

无法加载主机类型“VS IDE”,原因如下: 找不到密钥“VS IDE”。确保合适的主机 适配器已安装在机器上。

因此我试图在MSDN - How to: Install a Host Adapter 找到解决方案。但它仅记录在 VS2005 和 2008 中。

我想询问有关 VS 2013 的方向,我在哪里可以找到更多信息?或者我错过了什么?从 VS IDE 外部运行集成测试的正确方法是什么?如何以编程方式托管 IDE?

提前感谢您!

【问题讨论】:

    标签: c# visual-studio testing visual-studio-2013 automated-tests


    【解决方案1】:

    我意识到如何做到这一点,而无需使用 HostType 属性。希望以下代码 sn-p 也可以帮助其他人:

    Type visualStudioType = Type.GetTypeFromProgID("VisualStudio.DTE.12.0", true);    
    DTE env = Activator.CreateInstance(visualStudioType, true) as DTE;
    

    这将获取具有指定版本的 VS 的类型,并在错误时抛出异常。 DTE 将是 EnvDTE 的接口,可以使用。

    要获得服务,请执行以下操作,例如获取 UI Shell:

    ServiceProvider serviceProvider = new ServiceProvider(env as 
    Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
    IVsUIShell uiShell = (IVsUIShell)serviceProvider.GetService(typeof(SVsUIShell));
    

    应该跟踪服务,获取 rcw 句柄并在使用后正确释放 COM 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-20
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多