我正在为视图模型编写单元测试。该应用程序使用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