Silverlight单元测试,处理嵌套方法中的异步调用

Silverlight单元测试,处理嵌套方法中的异步调用,silverlight,unit-testing,specflow,Silverlight,Unit Testing,Specflow,在为silverlight创建单元测试时,测试框架似乎内置了一些功能来帮助异步调用,但只在测试方法中。若在您正在调用的子方法中有一个异步调用,该怎么办 例如,我们使用Specflow测试ViewModels,我们希望调用命令的Execute方法,然后该命令异步调用web服务。在断言结果之前,如何确保while命令已完成 例如,这是命令 [Asynchronous] [When(@"I press calculate")] public void WhenIPressCal

在为silverlight创建单元测试时,测试框架似乎内置了一些功能来帮助异步调用,但只在测试方法中。若在您正在调用的子方法中有一个异步调用,该怎么办

例如,我们使用Specflow测试ViewModels,我们希望调用命令的Execute方法,然后该命令异步调用web服务。在断言结果之前,如何确保while命令已完成

例如,这是命令

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

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

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

调用网络服务时,循环不起作用,因为回调已编组到UI线程,如果它针对某个条件进行循环,则会在回调等待线程完成时创建死锁

不管怎样,我们解决了这个问题。结果是specflow的人同时也在做这件事,并且有一个解决方案正在进行中。我们通过一个预发布版本来实现它

我在这里写了一篇关于它的博客


这可能会发生变化,因为这是在预发布版本中完成的,如果有,我希望有时间更新它。

如果异步调用与WCF服务相关,您可以创建一个模拟服务,该服务在方法调用中没有延迟。这是一种更好的方法,因为单元测试不能花费太多的时间来完成。我们实际上是在测试功能块(行为驱动的开发),所以我们最好调用一个真正的服务。这样我们就可以确保该功能的整体工作。