Не удается получить экземпляр работающего приложения при выполнении модульных тестов - Может получить его при запуске приложения - PullRequest
0 голосов
/ 17 апреля 2020

См. Обновление ниже, прежде чем читать!

У меня есть класс, чтобы получить экземпляр работающего приложения для работы с API этого приложения. Кажется, что он работает нормально в режиме отладки. Когда я запускаю модульные тесты, кажется, что он не может получить доступ к приложению.

Я получаю исключение:

System.Runtime.InteropServices.COMException: операция недоступна ( Исключение из HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))

Во-первых, позвольте мне сказать, что я понимаю, что если мой тест основан на внешнем приложении, то технически это не «модульный тест». В этом случае использование фреймворка для тестирования кода все еще очень полезно. Единственный другой способ, который я знаю, - это просто запустить и использовать контрольные точки для проверки значений или просто посмотреть, получу ли я желаемый результат. Вот так я и вырастил свои навыки и, честно говоря, это отстой. Таким образом, я пропустил много ошибок.

Мой код в классе, который является проблемой при тестировании:

        if(solidWorksApp == null)
        {
            string progId = "SldWorks.Application";
            solidWorksApp = System.Runtime.InteropServices.Marshal.GetActiveObject(progId) as ISldWorks;
        }

Я запускаю приложение в модульном тесте, используя следующее:

    [TestInitialize]
    public void TestInitialize()
    {
        var progId = "SldWorks.Application";
        var progType = System.Type.GetTypeFromProgID(progId);
        app = System.Activator.CreateInstance(progType) as ISldWorks;
        app.Visible = true;

        DocumentSpecification documentSpecification;
        documentSpecification = (DocumentSpecification)app.GetOpenDocSpec(fullFilePath);
        documentSpecification.DocumentType = (int)swDocumentTypes_e.swDocPART;
        var result = app.OpenDoc7(documentSpecification);
        if (result == null)
        {
            throw new Exception("Couldn't load SOlidworks test file.");
        }
    }

Почему я не смогу получить доступ к приложению, когда оно запускается модульным тестом? Есть ли обходной путь?

Обновление: Я попытался запустить приложение в обычном режиме и затем получить указатель на приложение в моем тесте с помощью Marshal.GetActiveObject. Это все еще не сработало. Затем я попытался запустить приложение вручную как администратор и Marshal.GetActiveObject. Я тогда смог получить приложение. Кажется, это проблема с разрешениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...