Quelle est l'approche standard pour résoudre les problèmes de synchronisation dans les tests d'interface utilisateur automatisés?
Exemple concret
J'utilise Visual Studio 2010 et Team Foundation Server 2010 pour créer des tests de l'interface utilisateur automatique et que vous voulez vérifier si ma demande a vraiment cessé de fonctionner:
[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() et StopMyApp() ont été enregistrés avec MS Test Manager 2010 et résident dans UIMap.uitest.
La dernière assertion échoue car l'assertion est exécutée alors que mon application est toujours en cours de fermeture. Si je mets un délai après StopApp() le cas de test passe.
Ce qui précède est juste un exemple pour expliquer mon problème. Quelle est l'approche standard pour résoudre ces problèmes de synchronisation? Une idée serait d'attendre avec l'assertion jusqu'à ce que je reçois une notification d'événement que mon application a été arrêtée.
+1 C'est une solution plutôt sympa. Je ne le savais pas. Travaux. Merci. – Lernkurve