Я пишу модульные тесты для моделей просмотра. Приложение написано с использованием Caliburn.Micro для поддержки MVVM. Многие модели просмотра зависят от Application.Current.Dispatcher с намерением отправить некоторый код в поток пользовательского интерфейса.Подвеска на Application.Current.Dispatcher.Invoke (действие) при tsing устройства
Чтобы создать объект Application внутри тестов я написал следующий класс:
public class AppInitializer {
private static Application app;
public static void InitApp() {
app = app ?? (app = Application.Current ?? new Application());
}
}
Теперь я просто сделайте следующее в каждом тестовом классе:
[ClassInitialize]
public static void InitClass(TestContext ctx) {
AppInitializer.InitApp();
}
К сожалению, первый звонок к Application.Current.Dispatcher из модели просмотра зависает мои тесты, пока не будет достигнут тайм-аут.
Я не хочу абстрагироваться каким-то образом Application.CurrentDispatcher, я не хочу пересматривать в модели моделей еще один издевавшийся объект. Я хочу получить обходное решение, если это возможно.
Если я добавлю app.Run(), этот вызов зависает. – EngineerSpock
Жаль, что я еще не закончил свой ответ. Я обновил его. – feO2x
Хммм, к сожалению, я использую везде статический метод Калиберна Execute.OnUITread (Action action). Это будет сложно насмехаться. – EngineerSpock