在为silverlight创建单元测试时,测试框架似乎具有内置功能,以帮助进行异步调用,但仅限于测试方法。如果在您呼叫的那个方法的子方法中存在异步调用,该怎么办?
作为一个例子,我们使用Specflow来测试我们的ViewModel,我们想要调用命令的Execute方法,然后该命令异步调用Web服务。如何在断言结果之前确保while命令已完成?
作为示例,这是命令
[Asynchronous]
[When(@"I press calculate")]
public void WhenIPressCalculate()
{
_helloWorldViewModel.CalculateCommand.Execute(null);
}
我需要等待整个命令完成才能继续。
答案 0 :(得分:0)
使用执行已完成的退出条件在同一方法中创建一个循环。
答案 1 :(得分:0)
在调用网络服务时循环不起作用,因为回调被编组到UI线程,如果它正在循环一个条件,它会在回调等待线程完成时创建死锁。 / p>
无论如何,我们把这个问题丢了。事实证明,specflow人员正在努力解决这个问题,并且正在制定解决方案。我们使用预发布版本。
我在这里写了一篇关于它的博客文章http://rburnham.wordpress.com/2011/05/13/testing-silverlight-asynchronous-code-with-specflow/
这可能会改变,因为这是通过预发布版本完成的,希望如果有的话,我会有时间更新它。