Как разместить VS IDE во время интеграционного теста через MSTest?
Я создал интеграционный тестовый проект для тестирования VS Extension. Если я запускаю тесты из Visual Studio IDE, все тесты работают нормально, и каждый метод порождает новую VS IDE. Методы испытаний отмечены следующими атрибутами:
[HostType("VS IDE")]
[TestMethod]
public void TestWhateverMethod() { ... }
Однако, если я пытаюсь автоматизировать тесты и запускать их из командной строки через MSTest (или VSTest), я получаю следующее сообщение об ошибке для тестов, размещенных в VS IDE:
Тип хоста "VS IDE" не может быть загружен по следующей причине: Не удалось найти ключ "VS IDE". Убедитесь, что на машине установлен соответствующий хост-адаптер.
Поэтому я попытался найти решение по адресу: MSDN - Как: установить хост-адаптер. Но это только зарегистрировано для VS2005 и 2008.
Я хотел бы попросить указания относительно VS 2013, где я могу узнать больше? Или чего мне не хватает? Как правильно запускать интеграционные тесты вне VS IDE? Как можно разместить IDE программно?
Заранее спасибо!
1 ответ
Я понял, как это сделать, не используя атрибут HostType. Надеемся, что следующий фрагмент кода может помочь другим:
Type visualStudioType = Type.GetTypeFromProgID("VisualStudio.DTE.12.0", true);
DTE env = Activator.CreateInstance(visualStudioType, true) as DTE;
Это получит тип VS с указанной версией и выдаст исключение при ошибке. DTE будет интерфейсом EnvDTE, который можно использовать.
Чтобы получить службы, выполните следующие действия, например, чтобы получить оболочку пользовательского интерфейса:
ServiceProvider serviceProvider = new ServiceProvider(env as
Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
IVsUIShell uiShell = (IVsUIShell)serviceProvider.GetService(typeof(SVsUIShell));
Нужно следить за сервисами, получить дескриптор rcw и правильно освободить COM-объект после использования.