【问题标题】:In a Visual Studio package, can I simulate (DTE) GetService(typeof (DTE)) for tests?在 Visual Studio 包中,我可以模拟 (DTE) GetService(typeof (DTE)) 进行测试吗?
【发布时间】:2014-10-28 22:16:51
【问题描述】:

在我的包中,我使用(DTE) GetService(typeof (DTE)) 来获取有关当前打开的解决方案的信息。有没有办法模拟这个进行测试,特别是这样我可以使用dte.Solution.SolutionBuild 构建?

主包类中的代码:

var solutionModel = new SolutionModel(((DTE) GetService(typeof (DTE))).Solution);

SolutionModel 类(剥离):

public class SolutionModel
{
    private readonly Solution _packageSolution;

    public SolutionModel(Solution solution)
    {
        _packageSolution = solution;
    }

    public SolutionModel() {} // This constructor is used for tests so _packageSolution will be null

    public bool Build()
    {
        if (_packageSolution != null)
        {
            var buildObject = _packageSolution.SolutionBuild;
            buildObject.Build(true);
            return buildObject.LastBuildInfo == 0;
        }

        return ManualCleanAndBuild(); // current messy alternative way of doing the build for tests
    }
}

所以我希望能够在我的测试中使用_packageSolution 构建而不是ManualCleanAndBuild()

【问题讨论】:

    标签: c# visual-studio envdte vspackage


    【解决方案1】:

    假设您指的是需要在真实 Visual Studio 实例中加载包的集成测试(而不是单元测试),这取决于您使用的测试框架。如果您将 MSTest 与 VSIDE 主机适配器一起使用(如果您在向导的最后一页中标记复选框,则包向导创建的集成测试项目)有一个使用静态 VsIdeTestHostContext 类来获取 DTE 的 Utils.cs 文件实例或服务:

       public static class VsIdeTestHostContext
       {
          [CLSCompliant(false)]
          public static DTE Dte { get; }
          public static IServiceProvider ServiceProvider { get; set; }
       }
    

    如果您想了解 VS IDE Host Adapter 的内部结构,我认为 VS 2008 SDK 是最后一个提供源代码和文档的 SDK (http://msdn.microsoft.com/en-us/library/bb286982%28v=vs.90%29.aspx)

    【讨论】:

    • 感谢您的回答,我完全没有注意到它为我生成了测试项目!我将在下周尝试一下,并在我将其标记为答案之前检查它是否对我有用。谢谢:)
    • 不幸的是,这些由向导创建的集成测试示例在 vs2015 中消失了。有人可以在网上发布这些吗?
    【解决方案2】:

    我最终“解决”这个问题的方式是模拟 EnvDTE.Solution(似乎只能在为您创建的 Package_IntegrationTests 项目中完成 - 您不能在任何其他项目中引用 EnvDTE项目)。我不知道如何使用下面 Carlos 建议的 Utils.cs 中的方法来打开我现有的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2020-07-21
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多