2014-10-28 47 views
2

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

码主包类:

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()

回答

0

我最终解决这个问题的方法是嘲笑EnvDTE.Solution(看起来只能在为你创建的Package_IntegrationTests项目中完成 - 你可以' t参考EnvDTE在任何其他项目中)。我无法弄清楚如何使用下面Carlos提出的Utils.cs中的方法来打开我现有的解决方案。

2

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

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

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

+0

感谢这个答案,我完全没有注意到它已经为我生成了测试项目!我将在下周出发,并在我将其标记为答案之前检查它是否适用于我。谢谢:) – 2014-11-03 14:30:39

+0

不幸的是这些由向导创建的集成测试样本在vs2015中没有了。任何人都可以在网上发帖吗 – David 2016-02-20 12:49:31

相关问题