C# Модульный тест не ожидает закрытия приложения перед переходом к следующему классу модульного теста - PullRequest
0 голосов
/ 03 марта 2020

Используя MSTest, у меня есть шесть классов юнит-тестов. Мне нужно приложение (SolidWorks), чтобы начать с нуля для каждого теста. Нет проблем, у меня есть в моем модульном тесте следующее для запуска и остановки SolidWorks до его начала и после его окончания:

    [ClassInitialize()]
    public static void MyClassInitialize(TestContext testContext)
    {
        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.");
        }
    }


    [ClassCleanup()]
    public static void MyClassCleanup()
    {
        if (app != null)
        {
            app.CloseAllDocuments(true);
            app.ExitApp();
        }
    }

Моя проблема заключается в том, что когда UnitTestClass1 завершает работу UnitTestClass2 запускается до завершения SolidWorks закрытие. UnitTestClass2, кажется, захватывает процесс SolidWorks, который был запущен в UnitTestClass1. Я попытался добавить Thread.Sleep:

    [ClassCleanup()]
    public static void MyClassCleanup()
    {
        if (app != null)
        {
            app.CloseAllDocuments(true);
            app.ExitApp();
            Thread.Sleep(5000);
        }
    }

Это, похоже, не сработало.

Я пытался некоторое время l oop, чтобы дождаться закрытия Solidworks и, кажется, зависло.

Если я запускаю каждый класс модульных тестов один за другим, все они работают нормально и проходят. Запуск в качестве группы, некоторые из которых не работают, потому что они тестируют в неправильной среде (файл из последнего теста все еще открыт).

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

Мне нужно, чтобы SolidWorks запускался в начале класса, запускал все тесты в классе и затем закрывался SolidWorks в конце класса. Я хочу, чтобы это произошло для каждого класса.

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