I는 다음의 기능MVVM 광 디스패처 단위 테스트
public void Reset()
{
DisableModule();
DispatcherHelper.UIDispatcher.Invoke(() =>
{
PixelPointInfoCollection.Clear();
PixelPointInfoCollection.Add(new PointViewModel());
});
_cachedPoints.Clear();
}
단위 테스트를 실행할 때 다음의 코드는 상기()를 호출 방법에 끼었을 갖는다.
디스패처에서 맞춤 인터페이스를 만들고 유닛 테스트에서 디스패처를 조롱하는 방법에 대한 기사를 보았습니다. 예 : http://blog.zuehlke.com/en/mvvm-and-unit-testing/
다른 방법이 있습니까? 커다란 코드 기반이 있습니다. 지금 모든 것을 바꿀 필요가 있습니까?
업데이트 지금 여기 들어 2016년 8월 18일 내가 무슨 짓을 그리고 그것은 App.xaml.cs를 내가 전화 AppServices.Init (새 DispatcherWrapper()) 안에 너무
public static class AppServices
{
public static IDispatcher Dispatcher { get; set; }
public static void Init(IDispatcher dispatcher)
{
Dispatcher = dispatcher;
}
}
//this inteface is in order to overrcome MVVM light Dispatcher so we can mock it for unit tests
public interface IDispatcher
{
void Invoke(Action action);
void Invoke(Action action, DispatcherPriority priority);
DispatcherOperation BeginInvoke(Action action);
}
public class DispatcherWrapper :IDispatcher
{
public DispatcherWrapper()
{
DispatcherHelper.Initialize();
}
public void Invoke(Action action)
{
DispatcherHelper.UIDispatcher.Invoke(action);
}
public void Invoke(Action action, DispatcherPriority priority)
{
DispatcherHelper.UIDispatcher.Invoke(action, priority);
}
public DispatcherOperation BeginInvoke(Action action)
{
return DispatcherHelper.UIDispatcher.BeginInvoke(action);
}
}
을하고있다;
단위 테스트에서 나는 을 호출합니다. AppServices.Init (Substitute.For()); 당신이 일이 내가 뭔가를 누락하는 경우 의견을주십시오
NSubstitute
를 사용, 나는 내가
DispatcherHelper.UIDispatcher.Invoke
불행히도 예. 귀하의 상황은 초기 설계 문제로 인해 단위 테스트에 코드 기반을 어렵게 만듭니다. 코드에 대한 단위 테스트를 만드는 것이 어렵다는 것은 코드가 얼마나 잘 설계되었는지와 직접 관련이 있습니다. 게시자가 게시물에서 언급 한 기사는 발송자 액세스를 모의 할 수 있도록하기 위해 수행해야하는 작업입니다. 발송자는 단위 테스트 중에 사용할 수없는 UI 스레드와 관련된 구현 문제입니다. 따라서 'Invoke'에 대한 잠금 – Nkosi