Вопрос
Каков стандартный подход к решению проблем синхронизации в автоматизированных тестах пользовательского интерфейса?
Конкретный пример
Я использую 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 (), то контрольный пример пройдет.
Выше приведен пример, объясняющий мою проблему. Каков стандартный подход для решения таких временных проблем? Одной из идей было бы подождать с утверждением, пока я не получу уведомление о том, что мое приложение было остановлено.