Как решить проблемы с синхронизацией в автоматизированных тестах пользовательского интерфейса с C # и Visual Studio? - PullRequest
3 голосов
/ 25 мая 2010

Вопрос

Каков стандартный подход к решению проблем синхронизации в автоматизированных тестах пользовательского интерфейса?

Конкретный пример

Я использую Visual Studio 2010 и Team Foundation Server 2010 для создания автоматических тестов пользовательского интерфейса и хочу проверить, действительно ли мое приложение перестало работать:

[TestMethod]
public void MyTestMethod()
{
    Assert.IsTrue(!IsMyAppRunning(), "App shouldn't be running, but is.");

    StartMyApp();
    Assert.IsTrue(IsMyAppRunning(), "App should have been started and should be running now.");

    StopMyApp();
    //Pause(500);
    Assert.IsTrue(!IsMyAppRunning(), "App was stopped and shouldn't be running anymore.");
}

private bool IsMyAppRunning()
{
    foreach (Process runningProcesse in Process.GetProcesses())
    {
        if (runningProcesse.ProcessName.Equals("Myapp"))
        {
            return true;
        }
    }
    return false;
}

private void Pause(int pauseTimeInMilliseconds)
{
     System.Threading.Thread.Sleep(pauseTimeInMilliseconds);
}

StartMyApp () и StopMyApp () записаны в MS Test Manager 2010 и находятся в UIMap.uitest.

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

Выше приведен пример, объясняющий мою проблему. Каков стандартный подход для решения таких временных проблем? Одной из идей было бы подождать с утверждением, пока я не получу уведомление о том, что мое приложение было остановлено.

Ответы [ 2 ]

3 голосов
/ 01 июня 2010

Вы можете добавить синхронизацию в StopMyApp. Если вы присоединяете объект Process к своему приложению, вы можете использовать Process.WaitForExit () для ожидания завершения программы.

1 голос
/ 26 мая 2010

Похоже, вы пытаетесь протестировать асинхронный интерфейс. Это не слишком хорошо работает с автоматизированным тестированием. Вы должны разбить его на два теста. Каждый тест должен обрабатывать одну сторону интерфейса, а противоположная сторона подвергается насмешке.

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