我有一个Windows Phone 7 Silverlight应用程序,我正在尝试进行单元测试。我的测试失败,出现以下错误:
System.DivideByZeroException:尝试除以零。
在以下行中:
Deployment.Current.Dispatcher.BeginInvoke(() => RaisePropertyChanged("Lat"));
我认为这是因为没有UI线程。我是否需要抽象BeginInvoke
次呼叫,以便在我的测试中嘲笑它们?
更新
我最终抽象了所以我可以在单元测试中嘲笑。效果很好。你觉得怎么样?
public class UiDispatcher : IUiDispatcher
{
public void InvokeOnUiThread(Action action)
{
Deployment.Current.Dispatcher.BeginInvoke(action);
}
}
答案 0 :(得分:3)
public void InvokeOnUiThread(Action action)
{
if(Deployment.Current.Dispatcher.CheckAccess())
{
action();
} else {
Deployment.Current.Dispatcher.BeginInvoke(action);
}
}
答案 1 :(得分:1)
虽然我自己没有尝试过这样做,但我敢打赌,MVVM Light框架中的DispatcherHelper类也会为你做这件事。我没有在单元测试的上下文中尝试过它,但我无意中从UI线程调用了DispatcherHelper,它似乎工作正常。
MVVM Light工具包可从http://mvvmlight.codeplex.com/的Laurent Bugnion获得,您可以在http://chriskoenig.net/series/wp7的博客上看到我最近对WP7和MVVM的探索。
HTH!
克里斯