В пакете Visual Studio можно ли имитировать (DTE) GetService(typeof (DTE)) для тестов?
В моем пакете я использую (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()
в моих тестах.
2 ответа
То, как я в конечном итоге "решил" это было издеваться EnvDTE.Solution
вместо этого (кажется, что это может быть сделано только в Package_IntegrationTests
проект, который создан для вас - вы не можете ссылаться EnvDTE
в любом другом проекте). Я не мог понять, как использовать методы в Utils.cs
как предложено Карлосом ниже, чтобы открыть мои существующие решения.
Предполагая, что вы имеете в виду интеграционные тесты (а не модульные тесты), где вам нужно загрузить свой пакет в реальном экземпляре 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)