【问题标题】:How to write test case for Dialog services MVVM Light如何为 Dialog 服务 MVVM Light 编写测试用例
【发布时间】:2015-09-18 12:23:51
【问题描述】:

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

我不明白的点是

  1. DialogService是我们应该通过继承IDialogService来创建的??

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

 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();
 }

如果上述情况在视图模型中为真,我们将 dialogServices.ShowMessage(prms....) ? 那么如何测试呢?

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

由于我对这种模式本身非常感兴趣,因此我很难理解。

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

编辑

我也提到了这个link。在评论中,它被告知其对视图的责任。 我更加困惑。一般来说,至少对于确认对话框,我们会怎么做?

谢谢。

【问题讨论】:

    标签: c# wpf mvvm mvvm-light


    【解决方案1】:

    不要在 ViewModel/业务逻辑中混合 UI 逻辑。 您应该将业务逻辑、UI 逻辑等关注点分开。

    我建议你使用 MvvmLight Messenger 工具。您的 ViewModel 应该发布消息“有一个信息对话框要显示”,并且适当的视图应该注册、侦听和处理此消息。

    例子:

    视图模型

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

    查看

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2018-12-11
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多