2010-06-19 6 views
3

단위 테스트를 위해 Windows Phone 7 Silverlight 응용 프로그램이 있습니다. 내 테스트는 다음 오류와 함께 실패 : 다음 줄에Deployment.Current.Dispatcher.BeginInvoke를 사용하여 단위 테스트 수행

System.DivideByZeroException : Attempted to divide by zero.

:

Deployment.Current.Dispatcher.BeginInvoke(() => RaisePropertyChanged("Lat")); 

내가 어떤 UI 스레드가 없기 때문에이 가정. 내 시험에서 조롱받을 수 있도록 BeginInvoke 전화를 추상화해야합니까?

업데이트 :

나는 내가 단위 테스트에서 조롱 수 추상화 끝났다. 훌륭하게 작동합니다. 어떻게 생각해? 나는이 나 자신을 위해 시도하지 않은 있지만

public class UiDispatcher : IUiDispatcher 
{ 
    public void InvokeOnUiThread(Action action) 
    { 
     Deployment.Current.Dispatcher.BeginInvoke(action); 
    } 
} 
+0

업데이트 된 게시물을 사용하고있는 단위 테스트 프레임 워크 추상화 – chief7

+0

로 : 당신은 당신이 필요하지 않은 경우 호출에서 당신을 저장할 수있는뿐만 아니라 조건 Dispatcher.CheckAccess()를 추가 할 수 있습니다? NUnitLite? – legalize

+0

NUnit. 위대한 작품! – chief7

답변

1

, 나는 MVVM 라이트 프레임 워크에서 DispatcherHelper 클래스뿐만 아니라 당신을 위해 그렇게 할 것이라는 점을 내기 할 것이다. 유닛 테스트의 컨텍스트에서 시도하지는 않았지만 실수로 UI 스레드에서 DispatcherHelper를 호출 했으므로 제대로 작동하는 것으로 보입니다.

MVVM Light 툴킷은 Laurent Bugnion http://mvvmlight.codeplex.com/에서 구할 수 있으며 내 블로그에서 내 가장 최근의 WP7 및 MVVM에 대한 검색을 http://chriskoenig.net/series/wp7에서 볼 수 있습니다.

HTH!
크리스

3

당신이 가지고 있습니다.

public void InvokeOnUiThread(Action action) 
{ 
    if(Deployment.Current.Dispatcher.CheckAccess()) 
    { 
     action(); 
    } else { 
     Deployment.Current.Dispatcher.BeginInvoke(action); 
    } 
}