0

在为 silverlight 创建单元测试时,测试框架似乎具有内置功能以帮助进行异步调用,但仅限于测试方法中。如果在您正在调用的方法的子方法中有一个异步调用怎么办。

作为一个例子,我们使用 Specflow 来测试我们的 ViewModel,我们想要调用命令的 Execute 方法,然后该命令异步调用 Web 服务。在断言结果之前,如何确保 while 命令完成?

例如,这是命令

    [Asynchronous]
    [When(@"I press calculate")]
    public void WhenIPressCalculate()
    {
        _helloWorldViewModel.CalculateCommand.Execute(null);
    }

在继续之前,我需要等待整个命令完成。

4

2 回答 2

0

调用网络服务时循环不起作用,因为回调被编组到 UI 线程,如果它正在循环一个条件,它会创建一个死锁,因为回调正在等待线程完成。

无论如何,我们解决了这个问题。事实证明,specflow 的人正在同时解决这个问题,并且正在制定解决方案。我们让它与预发布版本一起工作。

我在这里写了一篇关于它的博客文章http://rburnham.wordpress.com/2011/05/13/testing-silverlight-asynchronous-code-with-specflow/

这可能会改变,因为这是通过预发布版本完成的,希望我有时间更新它。

于 2011-06-02T09:57:09.750 回答
0

在相同的方法中使用执行已完成的退出条件进行循环。

于 2011-06-01T12:02:01.073 回答