在FitSharp

时间:2016-01-11 12:19:11

标签: c# backgroundworker fitnesse fitsharp

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

详细

我正在编写fixture以使用FitNesse (v20150814)和Fitsharp (v2.2.4498.25493)测试多线程C#应用程序(。NETv4)

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

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

然后,在用户交互过程中,工作人员开始:

        _backgroundWorker.Run(args);

在交互模式下,此工作正常,事件处理程序按预期调用。

然而,当我使用FitNesse夹具启动Run()命令时,只按预期调用DoWorkEventHandler。

其他处理程序(ProgressChanged,RunWorkerCompleted)直到测试结束时才被调用,大概是FitSharp线程也在完成。

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

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

其他信息

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

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

Sequence Diagram

序列图基于this thread information信息。 我可以根据要求发布更多详细信息,并为线程图像中的填空道歉,但我只能发布2个链接......

1 个答案:

答案 0 :(得分:0)

您需要某种方式告诉fitSharp等待后台工作人员完成后再继续测试脚本中的下一步。 wait until关键字可以帮助您做到这一点。有关详细信息,请参阅http://fitsharp.github.io/Fit/WaitUntilKeyword.html。您需要一种可以检测后台工作者何时完成的fixture方法。 e.g。

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

wait until版本2.3)中添加了fitSharp