Silverlight 使用Deployment.Current.Dispatcher.BeginInvoke进行单元测试
我有一个WindowsPhone7Silverlight应用程序,我正在尝试进行单元测试。我的测试失败,出现以下错误: System.DivideByZeroException:尝试除以零 在以下行:Silverlight 使用Deployment.Current.Dispatcher.BeginInvoke进行单元测试,silverlight,unit-testing,windows-phone-7,Silverlight,Unit Testing,Windows Phone 7,我有一个WindowsPhone7Silverlight应用程序,我正在尝试进行单元测试。我的测试失败,出现以下错误: System.DivideByZeroException:尝试除以零 在以下行: Deployment.Current.Dispatcher.BeginInvoke(() => RaisePropertyChanged("Lat")); 我认为这是因为没有UI线程。我是否需要抽象BeginInvoke调用,以便在测试中模拟它们 更新: 我最终进行了抽象,以便在单元测试中
Deployment.Current.Dispatcher.BeginInvoke(() => RaisePropertyChanged("Lat"));
我认为这是因为没有UI线程。我是否需要抽象BeginInvoke
调用,以便在测试中模拟它们
更新:
我最终进行了抽象,以便在单元测试中进行模拟。效果很好。你觉得怎么样
public class UiDispatcher : IUiDispatcher
{
public void InvokeOnUiThread(Action action)
{
Deployment.Current.Dispatcher.BeginInvoke(action);
}
}
虽然我自己没有尝试过这样做,但我敢打赌MVVM轻型框架中的DispatcherHelper类也会为您这样做。我没有在单元测试的环境中尝试过它,但我无意中从UI线程中调用了DispatcherHelper,它似乎工作正常 MVVM Light toolkit可从Laurent Bugnon处获得,您可以在我的博客上看到我对WP7和MVVM的最新探索 嗯
克里斯你成功了。您可能还需要添加一个Dispatcher.CheckAccess()条件,如果您不需要它,它可以将您从调用中解救出来:
public void InvokeOnUiThread(Action action)
{
if(Deployment.Current.Dispatcher.CheckAccess())
{
action();
} else {
Deployment.Current.Dispatcher.BeginInvoke(action);
}
}
更新了AbstrationWhat unit testing framework(单元测试框架)的帖子?努尼利特?