뷰 모델에 대한 단위 테스트를 작성하고 있습니다. 이 응용 프로그램은 MVVM 지원을 위해 Caliburn.Micro를 사용하여 작성됩니다. 많은 뷰 모델은 Application.Current.Dispatcher에 의존하여 UI 스레드에 일부 코드를 전달합니다. 불행하게도, 첫 번째 통화를Application.Current.Dispatcher에 매달려 있습니다. 단위 테스팅을 할 때의 액션 (동작)
[ClassInitialize]
public static void InitClass(TestContext ctx) {
AppInitializer.InitApp();
}
: 이제
public class AppInitializer {
private static Application app;
public static void InitApp() {
app = app ?? (app = Application.Current ?? new Application());
}
}
난 그냥 각 테스트 클래스에서 다음을 수행하십시오 테스트에서 내가 작성한에서
은 다음 클래스를 응용 프로그램 개체를 만들려면 보기 모델 내에서 Application.Current.Dispatcher로 이동하면 시간 제한에 도달 할 때까지 테스트가 중단됩니다.저는 어떻게 든 Application.CurrentDispatcher를 추상화하고 싶지 않습니다. 뷰 모델에 좀 더 조롱 된 객체를 전달하고 싶지는 않습니다. 가능한 경우 해결 방법을 원합니다.
app.Run()을 추가하면이 호출이 중단됩니다. – EngineerSpock
미안하지만 아직 내 대답이 끝나지 않았습니다. 나는 그것을 업데이트했다. – feO2x
흠, 불행히도 Caliburn의 정적 메서드 인 Execute.OnUITread (Action action)를 사용합니다. 그것은 모의하기가 어렵습니다. – EngineerSpock