首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BackgroundWorker事件处理程序直到FitSharp脚本结束时才调用

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

Stack Overflow用户
提问于 2016-01-11 12:19:10
回答 1查看 83关注 0票数 1

我很难编写一个测试使用C#线程的BackgroundWorker应用程序的夹具。任何帮助都将不胜感激!

详细信息

我正在编写夹具来测试多线程C#应用程序(.NETv4),它使用FitNesse (v20150814)和Fitsharp (v2.2.4498.25493)。

在ViewModel中,后台工作人员设置如下:

代码语言:javascript
复制
        _backgroundWorker = workerFactory.GetBackgroundWorker();
        _backgroundWorker.ProgressChangedEventHandler = BackgroundWorkerProgressChanged;
        _backgroundWorker.DoWorkEventHandler = BackgroundWorkerDoWork;
        _backgroundWorker.RunWorkerCompletedEventHandler = BackgroundWorkerRunWorkerCompleted;

然后,在用户交互期间,工作人员将被启动:

代码语言:javascript
复制
        _backgroundWorker.Run(args);

在交互模式下,可以很好地工作,并按预期调用事件处理程序。

但是,当我使用一个FitNesse工具启动FitNesse()命令时,只会像预期的那样调用DoWorkEventHandler。

其他处理程序(ProgressChanged、RunWorkerCompleted)直到测试结束时才被调用,据推测,此时FitSharp线程也正在完成。

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

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

更多信息

我分析了线程和调用堆栈,并绘制了一个图表来显示正在发生的事情。

问题是fitSharp测试模块是在之前打包并使用完成的,最后的事件处理程序是在我的工作线程(极右)上调用的。

序列图

序列图基于这个线程信息信息。如果需要的话,我可以发布更多的细节,并为线程图像中的填塞表示歉意,但是我只能发布2链接.

EN

回答 1

Stack Overflow用户

发布于 2016-01-12 04:38:13

在继续测试脚本的下一步之前,您需要一些方法告诉fitSharp等待后台工作人员完成。wait until关键字可以帮助做到这一点。详情请参见http://fitsharp.github.io/Fit/WaitUntilKeyword.html。您将需要一个可以检测后台工作人员何时完成的夹具方法。例如:

代码语言:javascript
复制
|myfixture|
|start worker|
|wait until|worker finished|true|
|check|some result|expected|

(wait until是在fitSharp版本2.3中添加的)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34721432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档