Как разместить 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-объект после использования.

Другие вопросы по тегам