Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 使用Deployment.Current.Dispatcher.BeginInvoke进行单元测试_Silverlight_Unit Testing_Windows Phone 7 - Fatal编程技术网

Silverlight 使用Deployment.Current.Dispatcher.BeginInvoke进行单元测试

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调用,以便在测试中模拟它们 更新: 我最终进行了抽象,以便在单元测试中

我有一个WindowsPhone7Silverlight应用程序,我正在尝试进行单元测试。我的测试失败,出现以下错误:

System.DivideByZeroException:尝试除以零

在以下行:

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(单元测试框架)的帖子?努尼利特?