使用 ObserveOnDispatcher 进行单元测试

发布于 2024-08-20 11:40:29 字数 458 浏览 8 评论 0原文

我的视图模型中有一些代码如下:

miService.GetSomething(par1, par2)
.ObserveOnDispatcher()
.Subscribe(dt =>
 {
    DoSomething(dt);
 });

然后在我的测试中,我“模拟”我的服务如下:

miService.Setup(ms => ms.GetSomething(....))
.Returns(Observable.Return(XYZ));

问题是由于 ObserveOnDispatcher,订阅委托永远不会被执行。

我看过一些使用 DispatcherFrame 和 PushFrame 的代码,但问题是我不知道“在哪里”,我可以调用

frame.Continue = false;

I've some code in my view model as follows:

miService.GetSomething(par1, par2)
.ObserveOnDispatcher()
.Subscribe(dt =>
 {
    DoSomething(dt);
 });

Then in my test, I'm "mocking" my service as follows:

miService.Setup(ms => ms.GetSomething(....))
.Returns(Observable.Return(XYZ));

The problem is that due to the ObserveOnDispatcher, the subscribe delegate is never executed.

I've seen some code with DispatcherFrame and PushFrame, but the problem is that I don't know "where", I can call

frame.Continue = false;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若无相欠,怎会相见 2024-08-27 11:40:29

你可以尝试

var frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(
  DispatcherPriority.Background, 
  new Action(() => frame.Continue = false));
Dispatcher.PushFrame(frame);

You could try

var frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(
  DispatcherPriority.Background, 
  new Action(() => frame.Continue = false));
Dispatcher.PushFrame(frame);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文