如何为 Dialog 服务 MVVM Light 编写测试用例

How to write test case for Dialog services MVVM Light

我是 MVVM 的新手,我正在关注 MVVM Light 工具包。 为了实现消息框功能,我搜索并得到了这个 example

没明白的地方是

  1. Class DialogService 就是我们应该继承IDialogService ??

如果是这种情况,例如在继承接口后class,我们需要编写如下内容

 public Task<bool> ShowMessage(string message, string title, string buttonConfirmText, string buttonCancelText, Action<bool> afterHideCallback)
 {
            //Here a kind of this implemetation i need to do ?
            //For example sake i didn't include the parameters.
  MessageBox.Show();
 }

If the above is true in the view model we will just dialogueServices.ShowMessage(prms....) ? So how this can be tested ?

例如,如果它是 filebrowser ,如果我们按照理解在单元测试中调用这种方式,它将打开一个文件浏览器。 如何实现?

因为我对这个模式本身很在意,所以我发现很难理解。

请提供示例实现或任何参考。

编辑

我也提到了这个link。在评论中,它被告知其对观点的责任。 我更糊涂了。一般来说,至少对于确认对话框,我们该怎么做?

谢谢。

不要在您的 ViewModel/Business 逻辑中混合 UI 逻辑。 您应该将业务逻辑、UI 逻辑等问题分开。

我建议您使用 MvvmLight Messenger 工具。您的 ViewModel 应该发布消息 "there is an informational dialog to show" 并且适当的视图应该注册、收听和处理此消息。

示例:

视图模型

public void SomeViewModelMethod() {
     if (somethingWentWrong)
        Messenger.Default.Publish(new ShowInformationalDialogMessage(title,msg));
}

查看

.. OnLoaded { 
   Messenger.Default.Register<ShowInformationalDialogMessage>( () => {
      UI LOGIC CODE
   });
}

要测试这种情况,您应该只在单元测试中注册到已发布的消息 class 并断言此消息逻辑已被执行。