在FitSharp中直到脚本结束时才调用BackgroundWorker事件处理程序

本文关键字:调用 BackgroundWorker 事件处理 程序 结束 FitSharp 脚本 | 更新日期: 2023-09-27 18:29:44

我正在努力编写一个fixture来测试使用BackgroundWorker线程的C#应用程序。任何帮助都将不胜感激!

详细信息

我正在编写固定装置,以使用FitNesse(v220150814)和Fitsharp

在ViewModel中,后台工作程序设置如下:

        _backgroundWorker = workerFactory.GetBackgroundWorker();
        _backgroundWorker.ProgressChangedEventHandler = BackgroundWorkerProgressChanged;
        _backgroundWorker.DoWorkEventHandler = BackgroundWorkerDoWork;
        _backgroundWorker.RunWorkerCompletedEventHandler = BackgroundWorkerRunWorkerCompleted;

然后,在用户交互过程中,工作人员被启动:

        _backgroundWorker.Run(args);

在交互模式中,这很好,事件处理程序按预期调用。

但是,当我使用FitNesse fixture启动Run()命令时,只会按预期调用DoWorkEventHandler。

其他处理程序(ProgressChanged、RunWorkerCompleted)直到测试的最后才被调用,据推测,FitSharp线程也在完成。

由于关键工作由其他处理程序节点,我无法测试后台工作人员的工作结果。

一位同事建议重新构建应用程序,以便所有工作都在DoWork事件处理程序中完成,并且可以工作,但如果可以避免的话,我真的不想重新处理应用程序。


其他信息

我分析了线程和调用堆栈,并绘制了一张图表来显示发生了什么

问题是fitSharp测试模块在我的工作线程(最右边)上调用最终事件处理程序之前已经打包并完成了

序列图

序列图基于该线程信息。如果需要的话,我可以发布更多的细节,并对帖子中的填鸭式处理表示歉意,但我只能发布2个链接。。。

在FitSharp中直到脚本结束时才调用BackgroundWorker事件处理程序

您需要某种方法来告诉fitSharp等待后台工作人员完成后再继续测试脚本中的下一步。wait until关键字可以帮助做到这一点。看见http://fitsharp.github.io/Fit/WaitUntilKeyword.html详细信息。您需要一个fixture方法,该方法可以检测后台工作程序何时完成。例如

|myfixture|
|start worker|
|wait until|worker finished|true|
|check|some result|expected|

wait untilfitSharp版本2.3中添加)