Pin*_*ani 4 wpf unit-testing dispatcher system.reactive observable
我想对包含如下注册的视图模型进行单元测试:
public SampleViewModel(IUnityContainer container)
{
...
Observable.FromEventPattern<PropertyChangedEventArgs>(gridViewModel, "PropertyChanged")
.**ObserveOnDispatcher()**
.Subscribe(_ => this.Update());
...
}
Run Code Online (Sandbox Code Playgroud)
当我运行单元测试时,它告诉我" 当前线程没有与之关联的Dispatcher. "到达此代码时.
一种解决方案是使用调度程序,但我不想修改Viewmodel.
是否有解决方案使单元测试通过此语句而不会出现错误?
我建议您提供自己的IScheduler实现,ObserveOn(IScheduler)而不是使用ObserveOnDispatcher()运算符.我已经使用了加载a DispatcherFrame或a的技术,Dispatcher但问题是你仍在使用Dispatcher.最终我发现你只是"从悬崖上掉下来",特别是一旦你有长时间运行的背景线程.按照"单元测试中没有线程"的指导原则,不要让调度员靠近你的ViewModels!你的单元测试运行得更快,更快.
处理此问题的一个更好的方法是注入一个接口,该接口可以访问您的Dispatcher Scheduler(通过IScheduler接口).这允许您在暴露的实现中替换TestScheduler.您现在可以控制单元测试的时间.您可以控制和验证为每个调度程序编组的操作.
这是一个非常古老的(前Rx)帖子'单元'测试WPF与2009年初的Dispatcher调用.当时这似乎是一个好主意.
https://leecampbell.com/2009/02/17/responsive-wpf-user-interfaces-part-5/
有关使用Rx进行测试的更多信息,请参阅TestScheduler我在Rx上的其他站点
http://introtorx.com/Content/v1.0.10621.0/16_TestingRx.html
| 归档时间: |
|
| 查看次数: |
2830 次 |
| 最近记录: |