我正在爲視圖模型編寫單元測試。該應用程序使用Caliburn.Micro爲MVVM支持編寫。許多視圖模型依賴於Application.Current.Dispatcher,目的是將一些代碼分派到UI線程中。單元測試時掛在Application.Current.Dispatcher.Invoke(action)
創建應用程序對象從測試中我寫了下面的類:
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 2014-09-05 06:58:04
對不起,我還沒有完成我的答案。我已經更新了它。 – feO2x 2014-09-05 07:04:27
不幸的是,我使用無處不在Caliburn的靜態方法Execute.OnUITread(Action action)。這將很難嘲笑。 – EngineerSpock 2014-09-05 07:13:08