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

时间:2015-07-01 11:15:35

标签: c# wpf mvvm mvvm-light

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

我不理解的要点是

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

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

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

    如果视图模型中的上述情况属实,我们将会这样做   dialogueServices.ShowMessage(prms ....)?   那么如何测试呢?

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

    由于我非常喜欢这种模式本身,我发现很难理解。

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

    修改

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

    感谢。

1 个答案:

答案 0 :(得分:2)

不要在ViewModel / Business逻辑中混用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
   });
}

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