Récemment, j'ai réécrit mon application Windows Forms pour utiliser des instances BackgroundWorker au lieu d'utiliser des «threads de travail» créés manuellement. Après l'enregistrement, j'ai remarqué que certains tests avaient échoué. Après un certain débogage je peux demonstate mes problèmes en vous montrant les 2 tests suivants:System.ComponentModel.BackgroundWorker n'invoque jamais ProgressChanged
[Test]
public void Test_A()
{
bool progressChanged = false;
var worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += (s, e) => worker.ReportProgress(0, null);
worker.ProgressChanged += (s, e) => progressChanged = true;
worker.RunWorkerAsync();
Thread.Sleep(100);
progressChanged.ShouldBeTrue();
}
[Test]
public void Test_B()
{
//Creation of o form component causes (?) this test to fail, even do I dispose it
var view = new Form();
view.Dispose();
bool progressChanged = false;
var worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += (s, e) => worker.ReportProgress(0, null);
worker.ProgressChanged += (s, e) => progressChanged = true;
worker.RunWorkerAsync();
Thread.Sleep(100);
progressChanged.ShouldBeTrue();
}
succès test_a tout échoue Test_B. C'est indépendamment si je dors 100 ms ou 100 minutes. Pourquoi?? Mon code de production semble fonctionner, mais il est ennuyeux de ne pas avoir une suite de tests de régression qui fonctionne (j'ai d'autres tests pour créer des composants Forms et ces tests doivent être exécutés AVANT mon test avec BackgroundWorker) Examinez le code source de BackgroundWorker, mais avant de le faire, j'ai pensé que je demanderais de l'aide ici.
Cordialement Michael
Merci beaucoup, a travaillé tout de suite! – Michael
Vous pouvez le marquer comme une réponse alors :) –