2014-10-28 8 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 프로젝트에서 할 수있는 것처럼 보입니다 - 다른 프로젝트에서는 EnvDTE 참조). 나는 기존의 솔루션을 열려면 아래 Carlos가 제안한대로 Utils.cs에있는 메서드를 사용하는 방법을 알아낼 수 없습니다.

2

실제 Visual Studio 인스턴스에서 패키지를로드해야하는 통합 테스트 (단위 테스트가 아닌)를 가정 할 때, 사용중인 테스트 프레임 워크에 따라 다릅니다. VSIDE 호스트 어댑터 (마법사의 마지막 페이지에서 확인란을 선택하면 패키지 마법사가 만드는 통합 테스트 프로젝트)와 함께 MSTest를 사용하는 경우 정적 VsIdeTestHostContext 클래스를 사용하여 DTE를 가져 오는 Utils.cs 파일이 있습니다 인스턴스 또는 서비스 :

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

당신은 내가 VS 2008 SDK 소스 코드 및 설명서를 제공 마지막 SDK라고 생각 VS IDE 호스트 어댑터의 내면을 알고 싶은 경우 (http://msdn.microsoft.com/en-us/library/bb286982%28v=vs.90%29.aspx)

+0

이 답변을 주셔서 감사합니다. 나는 저에게 테스트 프로젝트를 생성했음을 전혀 눈치 채지 못했습니다! 나는 이것을 다음주에 가지고 가서 이것을 대답으로 표시하기 전에 모든 것이 저를 위해 작동하는지 점검 할 것입니다. 감사합니다 :) –

+0

불행하게도 마법사가 만든 이러한 통합 테스트 샘플은 vs2015에서 사라졌습니다. 누구든지 온라인으로 게시 할 수 있습니까? – David